我试图在全局范围内将 CORS 配置设置到我的 Spring Boot 应用程序,以便不在每个控制器或端点中使用 @CrossOrigin 注释。据我检查 Spring docs 和 stackoverflow,设置自定义 CORS 配置的方式如下:
@Bean
public CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.addAllowedOrigin("http://localhost:3000");
configuration.addAllowedMethod("*");
configuration.addAllowedHeader("*");
configuration.setAllowCredentials(true);
UrlBasedCorsConfigurationSource source = new
UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}
最后在 SecurityFilterChain 中使用它,例如:
@Bean
protected SecurityFilterChain securityFilterChain(final HttpSecurity http) throws Exception {
http.cors(cors -> cors.configurationSource(corsConfigurationSource()))
//.cors(Customizer.withDefaults())
.csrf(
AbstractHttpConfigurer::disable
)
//Some more configurations...
return http.build();
}
根据其他用法,这个代码块应该没问题,但它给了我:
所需类型:CorsConfigurationSource 提供:UrlBasedCorsConfigurationSource
由于 CorsConfigurationSource bean 的返回类型而导致的错误。铸造也不起作用。
我正在使用 Spring Boot 3.1.0。
有什么建议吗?
我找到了解决方案。这有点傻,但可以帮助遇到同样问题的人:
我正在从以下位置导入 UrlBasedCorsConfigurationSource:
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
而不是
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
所以,你不应该从反应包中导入它。
解决方案 导入包 cors 并且不反应
org.springframework.web.cors.UrlBasedCorsConfigurationSource;