掌握Springboot跨域解决方案的四种方法
需积分: 0 117 浏览量
更新于2024-10-18
收藏 277KB ZIP 举报
资源摘要信息:"Springboot 解决跨域的四种姿势.pdf"
Spring Boot是当下流行的Java应用框架,它简化了基于Spring的应用开发过程。而在Web开发中,跨域资源共享(CORS)是一个常见问题,指的是一个域下的资源尝试去访问另一个域下的资源。由于浏览器安全策略,这种跨域访问默认是不被允许的。Spring Boot提供了多种方式来解决跨域问题,以下便是所谓的“四种姿势”。
一、使用 @CrossOrigin 注解
这是最简单的方式,可以在控制器(Controller)的方法上直接使用 @CrossOrigin 注解来允许跨域访问。例如:
```java
@CrossOrigin
@GetMapping("/example")
public ResponseEntity<String> getExample() {
return ResponseEntity.ok("Example Response");
}
```
还可以在类级别使用该注解,以便统一管理跨域设置。
二、使用 WebMvcConfigurer 接口
对于更复杂的跨域需求,可以通过配置WebMvcConfigurer接口的实现类来实现。示例如下:
```java
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**") // 允许跨域的路径
.allowedOrigins("*") // 允许的来源,使用"*"表示接受任何来源
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") // 允许的HTTP方法
.allowedHeaders("*") // 允许的请求头
.allowCredentials(true) // 是否允许发送Cookie信息
.maxAge(3600); // 预检请求结果缓存的最大时间
}
}
```
通过这种方式,可以为应用中所有端点设置统一的跨域策略。
三、使用 Filter
还可以通过添加一个过滤器(Filter)来处理跨域问题,这样可以在请求到达控制器之前对请求和响应进行处理。一个示例Filter如下:
```java
@Component
public class CorsFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with, authorization, Content-Type, Authorization, credential, X-XSRF-TOKEN");
if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
response.setStatus(HttpServletResponse.SC_OK);
} else {
chain.doFilter(req, res);
}
}
}
```
通过这种方式可以自定义跨域处理逻辑。
四、使用 AbstractAnnotationConfigDispatcherServletInitializer
对于Spring Boot应用,在Web应用初始化时,可以通过继承 AbstractAnnotationConfigDispatcherServletInitializer 类,并重写其方法来设置跨域。
```java
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {
registration.setInitParameter("dispatchOptionsRequest", "true");
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
// ... 其他方法的实现 ...
}
```
通过重写 customizeRegistration 方法,可以设置相应的CORS参数。
以上便是Spring Boot解决跨域问题的四种方法,它们各有特点,适用不同的场景。开发者可以根据应用的实际情况选择最适合的方式来解决跨域问题。
2021-01-06 上传
2019-01-25 上传
2021-10-26 上传
2021-10-30 上传
2022-10-28 上传
2024-05-26 上传
2024-03-23 上传
2024-06-24 上传
2020-11-05 上传
毕业小助手
- 粉丝: 2761
- 资源: 5583
最新资源
- AgileZap
- TagUI:创建TagUI示例以提高生产率
- generator-sails-plugin-hook:Yoeman 生成器创建帆钩,将其自身插入帆结构中
- 毕业设计&课设--趁早(quickearly)早餐外卖微信小程序--方便面的毕业设计.zip
- matlab-(含教程)基于sift特征提取的图像配准和拼接算法matlab仿真
- Excel模板00固定资产明细账.zip
- Hotel-Management-System:Django中的酒店管理系统
- dotfiles:我的dotfiles
- pscc2015:Capstone 2015 - 来自 KUB 与 PSTCC 的合作
- tlvc-api
- 毕业设计&课设--车辆管理系统本科毕业设计,php+mysql+python.zip
- matlab-(含教程)基于传感器融合(UWB+IMU+超声波)的卡尔曼滤波多点定位算法matlab仿真
- Excel模板收据打印模板.zip
- swipe-listener:零依赖性,最小化手势手势的Web侦听器
- chittiBirthday:学习NodeJS和Google云
- github-issue-agent:使用带有令牌的 Github 问题基础结构的 Node.js 项目