SpringMVC拦截器Interceptor导致跨越cors失效,Header获取不到

起因:

String authorization = request.getHeader("Authorization");

在拦截器中获取header中的Authorization 为空,但postman测试正常
前端报跨域错误,controller中已经配置了@CrossOrigin.

项目采用前后端分离,服务器端添加了全局的跨域配置,但是却出现了跨域问题,分析了多次请求发现有一部分请求并没有出现跨域,没有出现跨域的请求刚好就是拦截器放行的地址,所以分析可能是权限拦截器处理在跨域处理之前进行导致跨域配置失效。

改用过滤器CorsFilter 来配置跨域,由于Filter的位置是在Interceptor之前的,问题得到解决:

@Configuration
public class SystemConfig implements WebMvcConfigurer {

    @Autowired
    private JwtInterceptor jwtInterceptor;

    /**
     * 添加拦截器配置
     *
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(jwtInterceptor)
                //指定拦截器url地址
                .addPathPatterns("/**")
        .excludePathPatterns("/sys/login","/frame/register/**");
    }

    
    /**
     * 跨越配置
     * 改用过滤器CorsFilter 来配置跨域,由于Filter的位置是在Interceptor之前的,问题得到解决:
     */
    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        // 设置允许跨域请求的域名
        config.addAllowedOrigin("*");
        // 是否允许证书 不再默认开启
        // config.setAllowCredentials(true);
        // 设置允许的方法
        config.addAllowedMethod("*");
        // 允许任何头
        config.addAllowedHeader("*");
        config.addExposedHeader("token");
        UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
        configSource.registerCorsConfiguration("/**", config);
        return new CorsFilter(configSource);
    }
    

}

你可能感兴趣的:(SpringMVC拦截器Interceptor导致跨越cors失效,Header获取不到)