Spring Boot跨域解决方案全攻略:轻松实现跨域资源共享

随着互联网的发展,跨域资源共享(CORS)已经成为前端开发者必须面对的问题。Spring Boot作为当前最受欢迎的Java开发框架之一,也常常需要处理跨域问题。本文将深入探讨Spring Boot的跨域解决方案,帮助大家轻松实现跨域资源共享。
一、什么是跨域资源共享(CORS)
跨域资源共享(CORS)是一种让不同域之间的JavaScript可以访问对方服务器资源的策略。简单来说,就是一个域下的资源被另一个域下的脚本所请求时,浏览器会限制该请求,以防止恶意脚本的攻击。CORS策略通过设置HTTP响应头来控制资源是否允许跨域访问。
二、Spring Boot跨域解决方案
1. 配置全局CORS过滤器
Spring Boot提供了CORS的内置支持,可以通过配置全局CORS过滤器来处理跨域问题。以下是一个简单的示例:
```java
@Configuration
public class GlobalCorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.allowedHeaders("*")
.allowCredentials(true);
}
}
```
在上述代码中,`addMapping("/**")`表示拦截所有请求,`allowedOrigins("*")`表示允许所有域的访问,`allowedMethods`和`allowedHeaders`分别表示允许的请求方法和请求头,`allowCredentials(true)`表示是否允许携带凭证(如cookies)。
2. 使用@CrossOrigin注解
Spring Boot还提供了@CrossOrigin注解,可以用来为特定的控制器方法或类设置CORS策略。以下是一个示例:
```java
@RestController
@CrossOrigin(origins = "http://example.com", allowedHeaders = "*", allowCredentials = true)
public class ExampleController {
@GetMapping("/data")
public List
return Arrays.asList("data1", "data2", "data3");
}
}
```
在上述代码中,`@CrossOrigin`注解用于指定允许的域、请求头和凭证。
3. 使用自定义过滤器
如果需要更灵活地控制CORS策略,可以创建自定义过滤器来实现。以下是一个示例:
```java
@Component
public class CustomCORSFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
response.setHeader("Access-Control-Allow-Headers", "Content-Type, X-Requested-With, Accept, Origin, Authorization");
response.setHeader("Access-Control-Allow-Credentials", "true");
if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
response.setStatus(HttpServletResponse.SC_OK);
} else {
filterChain.doFilter(request, response);
}
}
}
```
在上述代码中,`doFilterInternal`方法用于设置CORS相关的响应头。如果请求方法是OPTIONS,表示进行预检请求,直接返回200状态码;否则,继续执行后续的过滤器链。
三、总结
本文介绍了Spring Boot的跨域解决方案,包括配置全局CORS过滤器、使用@CrossOrigin注解和自定义过滤器。在实际开发中,可以根据需求选择合适的方案来实现跨域资源共享。希望本文对大家有所帮助。





