Spring Boot 跨域解决方案详解:从原理到实战

随着互联网技术的发展,跨域资源共享(CORS)成为了Web开发中不可或缺的一部分。在Spring Boot项目中,实现跨域资源共享是一项基础但重要的任务。本文将从跨域资源共享的原理入手,详细讲解如何在Spring Boot项目中实现跨域解决方案。
一、跨域资源共享(CORS)简介
跨域资源共享(CORS)是一种让Web应用能够访问不同源(域名、协议或端口不同)资源的技术。在Web开发中,出于安全考虑,浏览器默认不允许跨域请求。然而,在实际项目中,跨域请求是不可避免的。因此,CORS应运而生。
CORS主要包含以下四个字段:
1. Origin:请求来源,即请求发起的域名、协议和端口号。
2. Access-Control-Allow-Origin:响应字段,表示是否允许该域名的请求访问资源。
3. Access-Control-Allow-Methods:响应字段,表示允许的HTTP请求方法。
4. Access-Control-Allow-Headers:响应字段,表示允许的HTTP请求头。
二、Spring Boot 跨域解决方案
Spring Boot提供了多种实现跨域资源共享的方法,以下将详细介绍几种常用的方法。
1. 全局配置
在Spring Boot项目中,可以通过配置文件或代码实现全局跨域解决方案。
配置文件方式
在`application.properties`或`application.yml`文件中添加以下配置:
```
# application.properties
spring.servlet.cors.allowed-origins=*
spring.servlet.cors.allowed-methods=GET,POST,PUT,DELETE,OPTIONS
spring.servlet.cors.allowed-headers=Content-Type,Access-Control-Allow-Headers
# application.yml
spring:
servlet:
cors:
allowed-origins: "*"
allowed-methods: [GET, POST, PUT, DELETE, OPTIONS]
allowed-headers: [Content-Type, Access-Control-Allow-Headers]
```
代码方式
在Spring Boot启动类或配置类中添加以下配置:
```java
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.allowedHeaders("Content-Type", "Access-Control-Allow-Headers");
}
}
```
2. 局部配置
对于某些需要特定跨域配置的Controller,可以在Controller类上添加`@CrossOrigin`注解实现局部跨域配置。
```java
@CrossOrigin(origins = "http://example.com", methods = {GET, POST}, allowedHeaders = {"Content-Type", "Access-Control-Allow-Headers"})
@RestController
public class ExampleController {
// ...
}
```
3. 过滤器实现
如果需要对所有请求进行跨域配置,可以创建一个过滤器来实现。
```java
public class CORSFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setHeader("Access-Control-Allow-Origin", "*");
httpResponse.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
httpResponse.setHeader("Access-Control-Allow-Headers", "Content-Type, Access-Control-Allow-Headers");
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
}
```
在Spring Boot启动类中添加过滤器:
```java
@Bean
public FilterRegistrationBean
FilterRegistrationBean
registrationBean.setFilter(new CORSFilter());
registrationBean.addUrlPatterns("/*");
return registrationBean;
}
```
三、总结
在Spring Boot项目中实现跨域资源共享,有全局配置、局部配置和过滤器三种方法。根据项目需求选择合适的方法,可以让跨域资源共享变得更加简单和高效。在实际开发中,还需要根据具体情况进行调整,以确保项目的安全性。






