探索flutter框架开发的app在移动应用市场的潜力与挑战
1001
2022-12-16
解决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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~