旧项目不知为何一直是正常的,但是现在需求在老项目后端的基础上再加一个前端地址做兼容,但是一直报错跨域 因为旧项目正常,导致浪费半天时间才查到问题。
本来已经有了以下配置
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
@Value("${cors.allowedOrigins}")
private String allowedOrigins;
@Override
protected void addCorsMappings(CorsRegistry registry) {
if ("prod-original".equals(allowedOrigins)) {
} else {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("*")
.allowedHeaders("*")
.allowCredentials(true);
}
}
但还是一直跨域报错没返回头Access-Control-Allow-Origin
gpt告知了我按我的这个配置或者查看springSecurity是否有覆盖,我因为老项目正常,一直没考虑到是Security的问题,直到不停的查资料 终于发现一篇文章
CORS跨域,使用spring security 后跨域配置失效_spring security3 cros()方法废弃了-CSDN博客
于是检查了下security配置 竟然真的没配置cros 但是我印象里有这个配置啊 可能是另一个项目的,记混了,加上后发现就可以了。
但是每一个改动都涉及老项目,这样加会不会对老项目有影响?
使用gpt进行分析
在 Spring Security 中添加 .and().cors();
会启用 Spring Security 对 CORS(跨域资源共享)的支持。
具体影响:
-
启用 CORS 支持:默认情况下,Spring Security 会阻止所有跨域请求。添加
.and().cors();
后,Spring Security 会基于应用中配置的CorsConfigurationSource
处理跨域请求。 -
依赖自定义配置:如果你已经在其他地方配置了 CORS 规则(例如在 Spring MVC 配置中使用
@CrossOrigin
注解或通过自定义的CorsConfiguration
),Spring Security 会使用这些配置来处理跨域请求。 -
默认配置:如果没有配置
CorsConfigurationSource
,Spring Security 会使用默认设置允许跨域,但这可能不适合生产环境,建议你根据需求自定义跨域配置。
总结
这行代码解决跨域问题的前提是你已经正确配置了 CORS 规则。否则,仅添加 .and().cors();
可能并不能解决所有跨域问题。你可能还需要在 Spring MVC 或其他配置中指定允许的源、方法和头信息等。