配置Spring Boot应用程序以支持跨源资源共享(CORS)。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
import org.springframework.web.util.pattern.PathPatternParser;
import java.util.Arrays;
// 处理跨域的配置类
@Configuration
public class CorsConfig {
@Bean
public CorsWebFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration(); // 创建CORS配置
config.addAllowedMethod("*"); // 允许所有HTTP方法
config.setAllowCredentials(true); // 允许cookies
// @todo 将下面的通配符替换为线上环境的真实域名
config.setAllowedOriginPatterns(Arrays.asList("*")); // 允许所有域名
config.addAllowedHeader("*"); // 允许所有头
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
source.registerCorsConfiguration("/**", config); // 为所有路径注册CORS配置
return new CorsWebFilter(source); // 创建CorsWebFilter
}
}
定义了一个CorsConfig
配置类,在这个类中有一个corsFilter
的Bean,这个Bean创建了一个CorsWebFilter
,这是Spring WebFlux中用于处理反应式Web应用程序CORS的组件。
以下是代码的详细分析:
- 使用
@Configuration
注解指示该类是一个配置类。 - 使用
@Bean
注解在方法corsFilter
上,表示该方法将返回一个Bean,该Bean会被Spring容器管理。
代码的具体行为如下:
- 创建了一个
CorsConfiguration
对象来存储CORS的配置信息。 config.addAllowedMethod("*")
允许所有的HTTP方法(GET, POST, PUT, DELETE等)。config.setAllowCredentials(true)
允许请求携带credentials信息(如cookies)。config.setAllowedOriginPatterns(Arrays.asList("*"))
允许来自所有域的请求。注意这里使用了*
,这是不安全的,因为它允许任何来源的请求。在实际部署中,应该将其替换为实际前端的域名。config.addAllowedHeader("*")
允许所有自定义的HTTP头部信息。
接下来,代码使用UrlBasedCorsConfigurationSource
和PathPatternParser
来指定CORS配置应适用于所有的URL路径。