网上提供了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