网上提供了2种跨域的设置方式
1为 重写 WebFluxConfigurer 的 addCorsMappings。
2为 提供一个 WebFilter 或 CorsWebFilter。
注意点,如果有权限验证的filter,建议使用第二种凡是,且CorsWebFilter一定要优先于AuthFilter过滤,否则跨域的PreFilght将一直失败,无法实现跨域。
Cors原理如下:
/**
* 跨域Filter
*/
@Configuration
@Data
public class CorsFilter implements WebFluxConfigurer {
@Value("#{‘${cors.allowedOrigins:*}‘.split(‘,‘)}")
private List<String> allowedOrigins;
@Value("#{‘${cors.allowedHeaders:*}‘.split(‘,‘)}")
private List<String> allowedHeaders;
@Value("#{‘${cors.allowedMethods:*}‘.split(‘,‘)}")
private List<String> allowedMethods;
@Value("${cors.corsMapping:/**}")
private String corsMapping;
/**
* corsWebFilter需要早于AuthFiler
*/
@Bean
@Order(-200) //非常重要,一定要早于AuthFilter
CorsWebFilter corsWebFilter() {
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
for(String val:allowedOrigins){
config.addAllowedOrigin(val);
}
for(String val:allowedHeaders){
config.addAllowedHeader(val);
}
for(String val:allowedMethods){
config.addAllowedMethod(val);
}
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration(corsMapping, config);
return new CorsWebFilter(source);
}
}
原文:https://www.cnblogs.com/gxiaoyang/p/13610839.html