SpringBoot中配置拦截器时,跨域失效
前后段分离的项目,配置了跨域后,访问正常,但是配置了拦截器以后,有的访问正常,有的出现跨域问题,发现出现跨域问题的都是拦截器里面没有放行的请求。
@Configuration
public class MyWebAppConfigurer extends WebMvcConfigurerAdapter {
static final String ORIGINS[] = new String[] { "GET", "POST", "PUT", "DELETE" };
//这是最初跨域的配置,但是在拦截器里面失效了。用下面的方法就会得到解决,这里就注释掉了。
//@Override
//public void addCorsMappings(CorsRegistry registry) {
//registry.addMapping("/**").allowedOrigins("*").allowCredentials(true).allowedMethods(ORIGINS)
// .maxAge(3600).allowedHeaders("*").exposedHeaders("access-control-allow-headers",
// "access-control-allow-methods",
// "access-control-allow-origin",
// "access-control-max-age",
// "X-Frame-Options", JwtUtils.TOKEN_HEADER);
}
//改用过滤器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);
}
@Bean
public JwtInterceptor getJwtInterceptor() {
return new JwtInterceptor();
}
//配置拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
System.out.println("我是拦截器。。。。。");
registry.addInterceptor(getJwtInterceptor()).excludePathPatterns("/login");
}
}
最后使用了CorsFilter 来配置跨域,问题就得到了解决。