在Spring Boot应用程序中配置cors。 Bean CorsConfigurationSource不起作用

时间:2019-04-03 17:05:14

标签: java spring websecurity

所以我无法配置cors。由于出现错误,我的角度应用程序无法发送api请求。 我可以通过soapUI发出请求,它们工作正常。但是从浏览器中可以找到:

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

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

我正在使用Spring Boot Web安全性。

@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有什么区别?

2 个答案:

答案 0 :(得分:1)

根据this,您还应该在.cors().and()方法中添加configure()

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

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

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

答案 1 :(得分: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

处获得了这段简短的代码