方式1 实现WebFilter拦截器
org.springframework.web.server.WebFilter
@Slf4j@Configuration@Order(Ordered.HIGHEST_PRECEDENCE)public class CorsWebFilter implements WebFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {/*** 增加CORS 解决前端登录跨域的问题*/ServerHttpRequest request = exchange.getRequest();if (CorsUtils.isCorsRequest(request)) {ServerHttpResponse response = exchange.getResponse();HttpHeaders headers = response.getHeaders();headers.add("Access-Control-Allow-Origin", "*");headers.add("Access-Control-Allow-Methods", "*");headers.add("Access-Control-Max-Age", "3600");headers.add("Access-Control-Allow-Headers", "*");if (request.getMethod() == HttpMethod.OPTIONS) {response.setStatusCode(HttpStatus.OK);return Mono.empty();}}return chain.filter(exchange);}}
方式二 使用官方CorsWebFilter,自定义配置
org.springframework.web.cors.reactive.CorsWebFilter
@Configurationpublic class CorsConfig {@Beanpublic CorsWebFilter corsFilter() {return new CorsWebFilter(corsConfigurationSource());}@BeanCorsConfigurationSource corsConfigurationSource() {final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();CorsConfiguration config = new CorsConfiguration().applyPermitDefaultValues();config.setAllowedHeaders(Arrays.asList("*"));config.setAllowedOrigins(Arrays.asList("*"));config.setAllowedMethods(Arrays.asList("*"));config.setAllowCredentials(true);config.setMaxAge(3600L);source.registerCorsConfiguration("/**", config);return source;}}
