一、使用注解@CrossOrigin
controller方法的CORS配置,您可以向@RequestMapping注解处理程序方法添加一个@CrossOrigin注解,以便启用CORS,放在类上对类下面所有方法生效,spring会整合类和方法上的参数。(默认情况下,@CrossOrigin允许在@RequestMapping注解中指定的所有源和HTTP方法):
@RestController
@CrossOrigin(origins = "http://domain2.com", maxAge = 3600)
@RestController
@RequestMapping("/user") public class AccountController {
@CrossOrigin
@GetMapping("/get/{id}") public Account retrieve(@PathVariable Long id) { // ...
}
其中@CrossOrigin中的2个参数:
origins : 允许可访问的域列表
maxAge:准备响应前的缓存持续的最大时间(以秒为单位)。
二、使用spring的CorsFilter过滤器
@Configuration
public class CorsConfig {
@Bean
public CorsFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
//设置源路径
config.addAllowedOrigin("*");
config.setAllowCredentials(true);
//设置可访问方法
config.addAllowedMethod("*");
config.addAllowedHeader("*");
config.addExposedHeader("Content-Type");
config.addExposedHeader("X-Requested-With");
config.addExposedHeader("accept");
config.addExposedHeader("Origin");
config.addExposedHeader("Access-Control-Request-Method");
config.addExposedHeader("Access-Control-Request-Headers");
UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
//设置过滤请求url
configSource.registerCorsConfiguration("/**", config);
return new CorsFilter(configSource);
}
}