Spring Boot Restful Service 和 CORS 问题

问题描述 投票:0回答:1

我使用 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结构。但我不明白在哪种情况下应该使用哪一个,也找不到详细的解释。我想知道是否有人可以提供关于这个问题的解释来源或解释。

angular spring-boot cors
1个回答
0
投票

在现代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
配置 - 但这只是一个观察/我的理论

© www.soinside.com 2019 - 2024. All rights reserved.