此问题与Disable Keycloak authentication for a specific url in spring-boot
有关我有一个第三方仪表板,可通过iFrame管理前端。但是它直接通过其搜索小部件调用了我的搜索API。下面提到的代码仅解决了此搜索API的CORS问题,并发送了此错误 ,所有其他API都能正常运行。
@Override
protected void configure(@Nonnull final HttpSecurity http) throws Exception {
super.configure(http);
http.csrf().disable();
http
.cors()
.and()
.authorizeRequests()
.antMatchers("/health", "/error").permitAll()
.antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
.anyRequest().authenticated();
}
现在,我在控制器上添加了以下代码,它开始工作:
@CrossOrigin(origins = "https://dashboard-url")
所以
答案 0 :(得分:-1)
是的,您所做的是正确的
请检查URL
如果您使用的是Spring Security,请确保同时在Spring Security级别启用CORS,以使其能够利用Spring MVC级别定义的配置。
因此,根据您的编码,您已经使用http.cors()在安全性上启用了cors,并且由于未定义corsConfigurationSource(CORS过滤器),因此它使用了通过@CORS(***)定义的MVC级别。
但是,如果您希望这些值是动态的,则可以将其与基于env的外部文件中的值一起使用,如下所示
@Bean
CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(Arrays.asList("https://example.com"));
configuration.setAllowedMethods(Arrays.asList("GET","POST"));
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}