方式1 实现WebFilter拦截器

  • org.springframework.web.server.WebFilter

    1. @Slf4j
    2. @Configuration
    3. @Order(Ordered.HIGHEST_PRECEDENCE)
    4. public class CorsWebFilter implements WebFilter {
    5. @Override
    6. public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
    7. /**
    8. * 增加CORS 解决前端登录跨域的问题
    9. */
    10. ServerHttpRequest request = exchange.getRequest();
    11. if (CorsUtils.isCorsRequest(request)) {
    12. ServerHttpResponse response = exchange.getResponse();
    13. HttpHeaders headers = response.getHeaders();
    14. headers.add("Access-Control-Allow-Origin", "*");
    15. headers.add("Access-Control-Allow-Methods", "*");
    16. headers.add("Access-Control-Max-Age", "3600");
    17. headers.add("Access-Control-Allow-Headers", "*");
    18. if (request.getMethod() == HttpMethod.OPTIONS) {
    19. response.setStatusCode(HttpStatus.OK);
    20. return Mono.empty();
    21. }
    22. }
    23. return chain.filter(exchange);
    24. }
    25. }

    方式二 使用官方CorsWebFilter,自定义配置

  • org.springframework.web.cors.reactive.CorsWebFilter

    1. @Configuration
    2. public class CorsConfig {
    3. @Bean
    4. public CorsWebFilter corsFilter() {
    5. return new CorsWebFilter(corsConfigurationSource());
    6. }
    7. @Bean
    8. CorsConfigurationSource corsConfigurationSource() {
    9. final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    10. CorsConfiguration config = new CorsConfiguration().applyPermitDefaultValues();
    11. config.setAllowedHeaders(Arrays.asList("*"));
    12. config.setAllowedOrigins(Arrays.asList("*"));
    13. config.setAllowedMethods(Arrays.asList("*"));
    14. config.setAllowCredentials(true);
    15. config.setMaxAge(3600L);
    16. source.registerCorsConfiguration("/**", config);
    17. return source;
    18. }
    19. }