本地联调前后端分离项目,由于端口不一样会导致跨域问题,这里介绍三种通过后端放通的方式去调整。
以下都是以springboot 工程为例
一、通过注册FilterRegistrationBean 实现
@Configuration
public class CorsConfig {
@Bean
public FilterRegistrationBean corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(false);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**",config);
FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean(new CorsFilter(source));
bean.setOrder(0);
return bean;
}
}
二、实现WebMvcConfigurer的addCorsMappings方法
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("POST","GET","PUT","OPTIONS","DELETE")
.maxAge(3600)
.allowCredentials(true);
}
}
三、@CrossOrigin
在对应的controller 层面 加上@CrossOrigin注解
@CrossOrigin
@RequestMapping("/set")
public class SetController {
private final SetService setService;
public SetController(SetService setService){
this.setService = setService;
}
}
无论是通过哪种方式配置 CORS,其实都是在构造 CorsConfiguration。 一个 CORS 配置用一个 CorsConfiguration类来表示

spring 中 对 CORS 规则校验都是,委托给DefaultCorsProcessor实现的.
DefaultCorsProcessor处理过程如下:
1、判断依据是Header中是否包含Origin。如果包含则说明为CORS请求,转到2;否则,不是CORS请求,不作任何处理。
2、判断response的Header是否已经包含Access-Control-Allow-Origin,如果包含,证明已经被处理过了,继续下一步,否则不再处理。
3、判断是否同源,如果是则转交给负责该请求的类处理。
4、是否配置了CORS规则,如果没有配置,且是预检请求,则拒绝该请求,如果没有配置,且不是预检请求,则交给负责该请求的类处理。如果配置了,则对该请求进行校验。
校验就是根据CorsConfiguration 这个类的配置进行判断:
1、判断origin是否合法
2、判断method是否合法
3、判断header 是否合法
4、如果全部合法,则在response header中添加响应的字段,并交给负责该请求的类处理,如果不合法,则拒绝该请求。

本文介绍了在SpringBoot项目中处理前后端分离的跨域问题的三种方法:通过FilterRegistrationBean、实现WebMvcConfigurer接口的addCorsMappings方法以及使用@CrossOrigin注解。每种方式都涉及到配置CorsConfiguration,包括设置允许的源、方法和头信息。通过这些配置,可以确保CORS请求得到正确处理。
1253

被折叠的 条评论
为什么被折叠?



