这应该很容易,但当然,因为它是Spring的安全,它不是。
我正在尝试从Angular应用程序访问一个作为Sping Boot 应用程序运行的相对简单的API。Angular可以很好地调用API,但由于CORS策略,后端阻止了请求:
我在安全配置中添加了以下内容:
@Bean
public CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(Arrays.asList("https://localtest.me:4200","http://localtest.me:4200"));
configuration.setAllowedMethods(Arrays.asList("GET","POST"));
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}
@Bean
@Profile("dev")
public SecurityFilterChain devFilterChain(HttpSecurity http) throws Exception {
// define a custom filter, irrelevant to question
// @formatter:off
http
.addFilterAfter(filter, ConcurrentSessionFilter.class)
.authorizeRequests()
.antMatchers("/path1","/path2","/logout").permitAll()
.anyRequest().authenticated()
.and()
.cors();
// @formatter:on
return http.build();
}
这仍然不能阻止CORS策略块。
我也尝试过将@CrossOrigin
的不同迭代(带和不带origins
参数):
- 在Controller类上
- 端点方法本身
我是不是犯了一个简单的错误?
2条答案
按热度按时间cwtwac6a1#
不是最引以为豪和最漂亮的解决方案,但几个月前,我还需要向我的前端公开一些端点,以便我的Angular 应用程序可以向它们发送请求。
bean可以在任何地方实现,因为它是一个bean,在我的例子中,我在www.example.com类中实现了它MainApplication.java。
eqoofvh92#
尝试添加这在这头(beggining你的控制器)