🔧 三种主流跨域配置方式
1. 全局配置(推荐)
通过实现WebMvcConfigurer
接口配置全局跨域规则:
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*") // 允许的源
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") // 允许的方法
.allowedHeaders("*") // 允许的请求头
.maxAge(3600); // 预检请求缓存时间
}
}
2. 注解配置(局部控制)
在Controller类或方法上使用@CrossOrigin
注解:
@RestController
@CrossOrigin(origins = "http://example.com",
methods = {RequestMethod.GET, RequestMethod.POST})
public class MyController {
@GetMapping("/api/data")
public String getData() {
return "跨域数据";
}
}
3. 过滤器配置(最灵活)
通过自定义过滤器实现跨域控制:
@Configuration
public class CorsConfig {
@Bean
public CorsFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
// 设置允许的域名
config.addAllowedOrigin("*"); // 前端开发环境
// 允许跨越发送cookie
config.setAllowCredentials(true);
// 放行全部原始头信息
config.addAllowedHeader("*");
// 允许所有请求方法跨域调用
config.addAllowedMethod("*");
// 预检请求的缓存时间(秒),即在这个时间段里,对于相同的跨域请求不会再次预检
config.setMaxAge(3600L);
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
}
选择最适合您项目的配置方式,让跨域问题不再成为开发障碍!