问题描述:
由于在项目中自定义了一个拦截器,这个拦截器会在filter过滤器之前执行,并且在此中间还会被springSecurity拦截一次,前端请求会先发送一次预检请求,由于SpringSecurity对该OPTIONS请求进行了拦截,发现头部没有携带Token信息,直接返回了401的状态,浏览器认为预检请求不通过,之后的真实请求当然也认为是不通过的。
解决方案:
因为使用的是SpringBoot+SpringSecurity框架,所以需要编写Cors跨域的配置,并在WebSecurityConfigurerAdapter安全适配器中添加 springsecurity放行配置
自定义的拦截器:
@SpringBootConfiguration
public class WebMvcConfiguration implements WebMvcConfigurer {
//注册自定义的拦截器,会与addCorsMappings互斥,配置的跨域不生效
@Override
public void addInterceptors(InterceptorRegistry registry) {
CommonInterceptor interceptor = new CommonInterceptor();
registry.addInterceptor(interceptor);
}
//这里的跨域配置不生