我使用 Spring Boot 创建了一个 Restful 服务,并使用 Angular 向该服务发送 HTTP 请求。当我使用 Angular 发送请求时,出现 CORS 错误,我使用人工智能来解决该错误。在第一次尝试中,它要求我建议以下 bean。
@Bean
public WebMvcConfigurer corsConfigurer(){
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://localhost:4200")
.allowedMethods("GET", "POST", "PUT", "DELETE", "HEAD", "OPTIONS")
.allowedHeaders("*")
.allowCredentials(true);
}
};
}
然后,当我想将前端导出为实时服务器时,我也遇到了 CORS 错误,它建议我添加以下 bean。
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.addAllowedOrigin("http://192.168.5.76:4200");
config.addAllowedOrigin("http://localhost:4200");
config.addAllowedMethod("*");
config.addAllowedHeader("*");
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
当我在互联网上做了更多研究时,我看到推荐使用WebMvcConfigurer结构。但我不明白在哪种情况下应该使用哪一个,也找不到详细的解释。我想知道是否有人可以提供关于这个问题的解释来源或解释。
在现代SpringSecurity(Spring Security 6)中,您应该与
SecurityFilterChain
一起进行CORS配置:
@Configuration
public class SecurityConfiguration {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception {
return httpSecurity
.cors(c -> {
CorsConfigurationSource source = request -> {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(List.of("http://localhost:4200"));
configuration.setAllowedMethods(List.of("GET", "POST"));
configuration.setAllowedHeaders(List.of("*"));
configuration.setAllowCredentials(true);
return configuration;
};
c.configurationSource(source);
})
.build();
}
}
我注意到,如果您尝试在
SecurityFilterChain
(其他地方)之后配置 CORS,可能会导致问题,因为某些默认配置已经使用 SecurityFilterChain
配置 - 但这只是一个观察/我的理论