Spring 跨域问题处理办法
it 技术革新 真快。15年16年 上半年开始流行 前后端分离技术。前端发送 ajax 请求。后端同统一定义接口返回结构 前端有自己的服务器和架构。后端只需要提供相应的接口就行。由于前后端的 技术分离 不在同一个 域名下。就出出现跨域问题。针对此问题 可以参考 w3c的文档 和spring 官方文档.spring跨域问题只需要 注解一个bean 配置下就行。
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**/**").allowedOrigins("前端的ip+端口");
}
};
}
例如 本地前端端口 localhost:4000
registry.addMapping("/**/**").allowedOrigins("localhost:4000");
Spring-web-4.2.6RELEASE.jar 高版本 jar 包完美支持跨域
@Bean
public CorsFilter corsFilter(Environment env) {
final CorsConfiguration corsConfiguration = new CorsConfiguration();
// String origins="http://test.shenghua.com:8080,http://123.23.45.67:8080"//前端 地址
String origins=env.getProperty("allowed.origin");//配置文件里面读取配置
log.info("cor allow origin:{}", origins);
if (StringUtils.isNotEmpty(origins)) {
IterableUtils.forEach(Splitter.on(",").split(origins), new Closure<String>() {
@Override
public void execute(String input) {
corsConfiguration.addAllowedOrigin(input);
}
});
} else {
corsConfiguration.addAllowedOrigin("*");
}
corsConfiguration.addAllowedHeader("*"); // 2
corsConfiguration.addAllowedMethod("*");
corsConfiguration.addExposedHeader("Set-Cookie");
corsConfiguration.setMaxAge(Long.parseLong(Integer.MAX_VALUE));
corsConfiguration.setAllowCredentials(true);
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", corsConfiguration); // 4
return new CorsFilter(source);
}