0

所以我不能配置cors。由于错误,我的 Angular 应用程序无法发送 api 请求。我可以通过soapUI 提出请求,它们工作正常。但从浏览器有:

从源“ http://localhost:4200 ”访问“ http://localhost:8080/backend/api/public ”处的 XMLHttpRequest已被 CORS 策略阻止:不存在“Access-Control-Allow-Origin”标头在请求的资源上。

我一直在寻找答案,它们看起来就像我的班级。

我正在使用 Spring Boot 网络安全。

@EnableWebSecurity
@Configuration
public class AuthConfig extends WebSecurityConfigurerAdapter {

    @Value(value = "${auth0.apiAudience}")
    private String apiAudience;
    @Value(value = "${auth0.issuer}")
    private String issuer;


    @Bean
    CorsConfigurationSource corsConfigurationSource() {
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOrigins(Arrays.asList("http://localhost:4200"));
        configuration.setAllowedMethods(Arrays.asList("GET","POST"));
        configuration.setAllowCredentials(true);
        configuration.addAllowedHeader("Authorization");
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**",configuration);
        return source;
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        JwtWebSecurityConfigurer
                .forRS256(apiAudience, issuer)
                .configure(http)
                .authorizeRequests()
                .antMatchers(HttpMethod.GET,"/api/public").permitAll()
                .antMatchers(HttpMethod.GET, "/api/private").authenticated()
                .antMatchers(HttpMethod.GET, "/api/private-scoped").hasAnyAuthority("read:posts");
    }
}

这个 bean 应该添加这个 cors 头,但它没有。也许您知道这样做的更好主意吗?beetwen WebSecurityConfigurerAdapter 和 WebMvcConfigurerAdapter 有什么区别?

4

2 回答 2

1

根据这个,你也应该添加.cors().and()你的configure()方法。

还有其他可能的解决方案,例如通过设置特定于每个端点的 CORS 配置,如此处所示

但是,如果您想为整个应用程序启用 CORS,第一种方法更漂亮。

WebSecurityConfigurerAdapter 和 WebMvcConfigurerAdapter 之间的区别在于,WebSecurityConfigurerAdapter 用于配置与 web 应用程序的安全性相关的任何内容,例如身份验证和授权。使用 WebMvcConfigurerAdapter,您可以为 Spring MVC 自定义基于 Java 的配置。

于 2019-04-03T17:26:53.173 回答
0

我有同样的问题,我无法让 CorsConfigurationSource bean 工作。所以我尝试了不同的方法。我没有使用 CorsConfigurationSource bean 配置。相反,我使用了 cors 注册表替代方案或全局 CORS 配置。

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
            .allowedOrigins("http://localhost:4200")
            .allowCredentials(true);
    }
}

从 AuthConfig 类中删除 CorsConfigurationSource 配置 bean。我从https://www.baeldung.com/spring-cors得到了这段代码

于 2020-01-23T17:18:14.150 回答