Spring Security CORS被策略阻止

kxeu7u2r  于 2023-01-19  发布在  Spring
关注(0)|答案(2)|浏览(199)

这应该很容易,但当然,因为它是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类上
  • 端点方法本身

我是不是犯了一个简单的错误?

cwtwac6a

cwtwac6a1#

不是最引以为豪和最漂亮的解决方案,但几个月前,我还需要向我的前端公开一些端点,以便我的Angular 应用程序可以向它们发送请求。

@Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/user").allowedOrigins("http://localhost:4200");
                registry.addMapping("/post").allowedOrigins("http://localhost:4200");
                registry.addMapping("/post/").allowedOrigins("http://localhost:4200");
                registry.addMapping("/user/{id}").allowedOrigins("http://localhost:4200");
                registry.addMapping("/post/{id}").allowedOrigins("http://localhost:4200");
                registry.addMapping("/post/user").allowedOrigins("http://localhost:4200");
                registry.addMapping("/post/user/").allowedOrigins("http://localhost:4200");
                registry.addMapping("/post/user/{id}").allowedOrigins("http://localhost:4200");
                registry.addMapping("/user/").allowedOrigins("http://localhost:4200");
            }
        };
    }

bean可以在任何地方实现,因为它是一个bean,在我的例子中,我在www.example.com类中实现了它MainApplication.java。

eqoofvh9

eqoofvh92#

尝试添加这在这头(beggining你的控制器)

@CrossOrigin(origins = "http://localhost:{youy_angular_application_port}")
public class YourRestController {
}

相关问题