解决SpringBoot自定义 * 和跨域配置冲突的问题
作者:G·S 时间:2022-01-31 04:59:29
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("/**")
.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("/**");
}
}
因为登录超时的检查是在 * 中,所以推测是可能是 * 的执行在addCorsMappings生效之前。将CorsFilter代码拿到项目中后,果然没有这个问题了。所以这个bu基本上可以认定是是 * 和addCorsMappings生效顺序的问题。
来源:https://blog.csdn.net/weixin_43876438/article/details/115602730
标签:SpringBoot, , ,跨域
0
投稿
猜你喜欢
Java 程序内部是如何执行的?
2022-04-29 20:18:36
基于@RequestBody和@ResponseBody及Stringify()的作用说明
2021-12-14 01:47:38
全面解析Java中的引用类型
2022-07-15 23:48:07
C#中Lambda表达式的用法
2022-12-22 15:59:17
Android巧用DecorView实现对话框功能
2022-07-14 14:03:40
C#使用SQL DataAdapter数据适配代码实例
2021-11-29 11:51:15
Swagger及knife4j的基本使用详解
2023-02-13 09:34:00
Android应用获取设备序列号的方法
2021-07-17 00:55:31
Spring自动装配Bean实现过程详解
2023-10-31 18:35:21
Spring Boot整合JWT的实现步骤
2022-07-17 04:48:58
java基础的详细了解第四天
2022-11-25 07:24:51
浅析java 10中的var关键字用法
2021-12-23 15:18:17
Default Methods实例解析
2023-05-18 19:28:01
C#深浅拷贝的深入解析
2023-03-28 18:36:28
C#多维数组学习使用
2023-07-06 11:51:02
Android自定义控件之组合控件学习笔记分享
2022-09-18 01:09:22
idea创建JAVA Class时自动生成头部文档注释的方法
2023-07-10 18:53:07
Java 容器类源码详解 Set
2022-03-21 18:08:40
解决javac不是内部或外部命令,也不是可运行程序的报错问题
2022-07-13 22:39:25
Android登录注册功能 数据库SQLite验证
2023-10-01 20:58:55