我们在项目中前后端联调是会出现跨域问题,那么怎么样允许前端应用从任何域名发起HTTP请求到后端应用,而不受浏览器的CORS策略阻止呢
注入一个bean加一些跨域配置就可以了,代码如下:
/**
* 允许跨域请求
*/
@Configuration
public class CSRFConfiguration {
@Bean
public CorsFilter corsFilter() {
//1. 添加 CORS配置信息
CorsConfiguration config = new CorsConfiguration();
//放行哪些原始域
config.addAllowedOriginPattern("*");
//是否发送 Cookie
config.setAllowCredentials(true);
//放行哪些请求方式
config.addAllowedMethod("*");
//放行哪些原始请求头部信息
config.addAllowedHeader("*");
//暴露哪些头部信息
config.addExposedHeader("*");
//2. 添加映射路径
UrlBasedCorsConfigurationSource corsConfigurationSource = new
UrlBasedCorsConfigurationSource();
corsConfigurationSource.registerCorsConfiguration("/**",config);
//3. 返回新的CorsFilter
return new CorsFilter(corsConfigurationSource);
}
}
实例1
@Configuration
public class GlobalCorsConfig {
//跨域访问配置
@Bean
public WebMvcConfigurer corsConfiguration() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
//配置用在哪些路径
registry.addMapping("/**")
//放行原始域
.allowedOrigins("*")
//是否发送 Cookie
.allowCredentials(true)
//放行原始域(请求方式)
.allowedMethods("GET", "POST", "PUT", "DELETE")
//放行原始域(头部信息)
.allowedHeaders("*")
//暴露那些头部信息(跨域默认不能获得所有信息)
.exposedHeaders("Header", "Header1");
}
};
}
}
实例2
@Configuration
public class GlobalCorsConfig {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
//*表示所有域名都可以访问,或者你可以设置指定的域名
registry.addMapping("/**") //所有的方法都做跨域处理
.allowedOrigins("*") // 允许的客户端原点,*代表所有
.allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS") // 允许的HTTP方法,设置*表所有方法都可以
.allowCredentials(true) // 是否允许携带cookies信息
.maxAge(3600) // 浏览器缓存预检请求的响应时间(秒)
.allowedHeaders("*"); // 允许的HTTP请求头,设置*表示所有
}
};
}
}
当然最好的方法是直接说出需求chatGPT生成代码就可以了
这段代码的目的是允许前端应用从任何域名发起HTTP请求到后端应用,而不受浏览器的CORS策略阻止;这对于开发跨域的Web应用非常有用,使前端能够与不同域的后端服务进行通信
但要注意,在生产环境中,应仔细配置CORS,以确保安全性和访问控制