springboot拦截器导致@CrossOrigin跨域失效

springboot拦截器导致@CrossOrigin失效。

原因:

1、CROS复杂请求时会首先发送一个OPTIONS请求做嗅探,来测试服务器是否支持本次请求,请求成功后才会发送真实的请求;而OPTIONS请求不会携带数据,导致这个请求被拦截了,直接返回了状态码,响应头中没携带解决跨域问题的头部信息,出现了跨域问题。

方法一:

因此解决方案是把所有的OPTIONS请求统统放行。详细分析见:https://blog.csdn.net/MrKorbin/article/details/104066979

在preHandle加以下内容:

if("OPTIONS".equals(request.getMethod().toUpperCase())) {
            return true;
        }

 

 方法二:

不使用@CrosOrigin注解解决跨域问题,使用过滤器:示例使用CorsFilter,也就是一个封装了解决跨域问题的filter而已。

package com.pacmp.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

/**
 * @Author 
 * @Date 2020/6/19 15:48
 * @Version 版本号
 * @Description 描述
 */
@Configuration
public class GlobalCorsConfig {

    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.addAllowedOrigin("*");
        config.setAllowCredentials(true);
        config.addAllowedMethod("*");
        config.addAllowedHeader("*");
        UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
        configSource.registerCorsConfiguration("/**", config);
        return new CorsFilter(configSource);
    }

}

 

posted @ 2020-06-19 16:32  小泉哥  阅读(5977)  评论(2编辑  收藏  举报