解决SpringBoot自定义拦截器和跨域配置冲突的问题

网友投稿 1001 2022-12-16

解决SpringBoot自定义-和跨域配置冲突的问题

解决SpringBoot自定义-和跨域配置冲突的问题

目录SpringBoot自定义-和跨域配置冲突技术栈问题引出原代码新代码SpringBoot -和addCorsMappings冲突

SpringBoot自定义-和跨域配置冲突

技术栈

vue-cli3,springboot 2.3.2.RELEASE

问题引出

在做毕业设计过程中用到了自定义-验证登录。同时在springboot配置类中设置了跨域问题,出现跨域失败的情况。

原代码

@Configuration

public class WebConfig extends WebMvcConfigurationSupport {

@Override

protected void addCorsMappings(CorsRegistry registry) {

registry.addMapping("/**")

.allowedOrigins("*")

.allowedMethods("GET", "HEAD", "POST","PUT", "DELETE", "OPTIONS")

.allowedHeaders("*")

.maxAge(3600);

super.addCorsMappings(registry);

}

@Override

protected void addInterceptors(InterceptorRegistry registry) {

registry.addInterceptor(new AuthInterceptor())

.addPathPatterns("/**")

http:// .excludePathPatterns("/login/*","/register/*");

}

}

经过了解和排查发现,当有请求发送到后台时,先被自定义-拦截,如果-验证没有问题,才会开始执行跨域配置。因此解决办法是让跨域配置在自定义-之前执行。而Filter的执行顺序大于自定义-,因此可以在Filter中实现跨域的配置。

新代码

@Configuration

public class WebConfig extends WebMvcConfigurationSupport {

@Override

protected void addInterceptors(InterceptorRegistry registry) {

registry.addInterceptor(new AuthInterceptor())

.addPathPatterns("/**")

.excludePathPatterns("/login/*","/register/*");

}

}

添加Filter

@Configuration

public class MyCorsFilter{

private CorsConfiguration corsConfig(){

CorsConfiguration corsConfiguration = new CorsConfiguration();

corsConfiguration.addAllowedHeader("*");

corsConfiguration.addAllowedMethod("*");

corsConfiguration.addAllowedOrigin("*");

corsConfiguration.setMaxAge(3600L);

corsConfiguration.setAllowCredentials(true);

return corsConfiguration;

}

@Bean

public CorsFilter corsFilter(){

UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();

source.registerCorsConfiguration("/**",corsConfig());

return new CorsFilter(source);

}

}

SpringBoot -和addCorsMappings冲突

项目中最开始跨域问题是通过自定义过滤器CorsFilter对request处理的,可以很好的解决问题。

最近,新项目中准备通过如下代码解决跨域问题,结果发现登录超时的错误会出现跨域问题,其他问题都不会。

@Configuration

public class WebConfig extends WebMvcConfigurerAdapter {

@Override

public void addCorsMappings(CorsRegistry registry) {

registry.addMapping("/**");

}

}

因为登录超时的检查是在-中,所以推测是可http://能是-的执行在addCorsMappings生效之前。将CorsFilter代码拿到项目中后,果然没有这个问题了。所以这个bu基本上可以认定是是-和addCorsMappings生效顺序的问题。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:下载法宣在线考试小程序(法宣考试登录平台下载)
下一篇:深入理解窗口令牌WindowToken
相关文章

 发表评论

暂时没有评论,来抢沙发吧~