当使用Spring Boot开发Web应用程序时,有时需要处理跨域请求。跨域请求是指在浏览器中,使用JavaScript从一个域(或者端口、协议)向另一个域(或者端口、协议)发起请求。默认情况下,浏览器会限制跨域请求,以确保安全性。
Spring Boot提供了一种简单的方式来解决跨域问题,通过配置跨域资源共享(CORS)支持
CORS(Cross-Origin Resource Sharing)是一种用于解决跨域访问的机制。当在浏览器中执行跨域请求时,浏览器会使用CORS来判断是否允许该请求跨域访问。
创建一个配置类,并使用@Configuration注解标记。在该类上使用@Bean注解,创建一个WebMvcConfigurer类型的Bean,并覆盖addCorsMappings方法。
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("*")
.allowCredentials(true)
.maxAge(3600);
}
}
在上述配置中,我们使用addMapping方法指定允许跨域的URL路径。通常,使用/**表示匹配所有路径。allowedOrigins方法定义允许的源(域名),使用*表示允许所有源。allowedMethods定义允许的HTTP方法,allowedHeaders定义允许的请求头,allowCredentials定义是否允许发送认证信息,maxAge定义预检请求的有效期。
也可以通过配置文件进行配置
application.properties:
spring.mvc.cors.allowed-origins=http://example.com
spring.mvc.cors.allowed-methods=GET,POST,PUT,DELETE
spring.mvc.cors.allowed-headers=*
spring.mvc.cors.allow-credentials=true
spring.mvc.cors.max-age=3600
application.yml:
spring:
mvc:
cors:
allowed-origins: http://example.com
allowed-methods: GET,POST,PUT,DELETE
allowed-headers: *
allow-credentials: true
max-age: 3600
使用注解方式:在需要跨域支持的Controller类或方法上添加@CrossOrigin注解。例如:
@RestController
public class MyController {
@GetMapping("/example")
@CrossOrigin(origins = "http://example.com")
public String example() {
// 处理请求的方法
}
}
使用配置类方式:创建一个配置类,继承自WebMvcConfigurer接口,并重写addCorsMappings方法。例如:
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/example")
.allowedOrigins("http://example.com")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("*")
.allowCredentials(true)
.maxAge(3600);
}
}
如果想要同时允许多个地址通过跨域
注解:
@RestController
public class MyController {
@GetMapping("/example")
@CrossOrigin(origins = {"http://example1.com", "http://example2.com"})
public String example() {
// 处理请求的方法
}
}
配置类:
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/example")
.allowedOrigins("http://example1.com", "http://example2.com")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("*")
.allowCredentials(true)
.maxAge(3600);
}
}