Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法在spring security中允许交叉源_Java_Spring_Spring Boot_Spring Security_Oauth 2.0 - Fatal编程技术网

Java 无法在spring security中允许交叉源

Java 无法在spring security中允许交叉源,java,spring,spring-boot,spring-security,oauth-2.0,Java,Spring,Spring Boot,Spring Security,Oauth 2.0,我有一个带有oauth2身份验证的SpringREST应用程序。一切正常,我可以收到一个令牌,并使用它来验证和所有的东西。现在我正在为Angular2的应用程序开发一个前端 这里的主要问题是:如何在Oauth2安全配置中允许CORS? 我已经通过@CrossOrigin注释在我的控制器类中允许了它,但是它在安全配置中是如何工作的呢 我试过这个: @Configuration @EnableWebSecurity public class OAuth2SecurityConfiguration e

我有一个带有oauth2身份验证的SpringREST应用程序。一切正常,我可以收到一个令牌,并使用它来验证和所有的东西。现在我正在为Angular2的应用程序开发一个前端

这里的主要问题是:如何在Oauth2安全配置中允许CORS? 我已经通过@CrossOrigin注释在我的控制器类中允许了它,但是它在安全配置中是如何工作的呢

我试过这个:

@Configuration
@EnableWebSecurity
public class OAuth2SecurityConfiguration extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http
        .csrf().disable()
        .anonymous().disable()
        .authorizeRequests()
        .antMatchers(HttpMethod.OPTIONS, "/oauth/token").permitAll()
        .and()
        .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    }
    @Bean
    CorsConfigurationSource corsConfigurationSource() {
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOrigins(Arrays.asList("http://localhost:3000"));
        configuration.setAllowedMethods(Arrays.asList("GET","POST"));
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }
}
但我还是犯了一个错误:

请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许“源”访问。响应的HTTP状态代码为401


根据Spring文档,CorsConfigurationSource不是作为bean使用的,而是在CorsFilter中使用的,请参阅

另一种方法是在WebMVCConfigureAdapter中提供cors映射,请参阅


我正在使用WebSecurity配置适配器。此类中没有名为addCorsMappings的方法。如果使用第一种方法,我会在配置类中添加什么?我添加了一个名为MyCorsFilter的新类,但我不知道如何使用它WebSecurity配置适配器中没有方法addCorsMapping,因为CORS不是Spring安全性的一部分。只需添加一个WebMVCConfigureAdapter,如文档中所述。我仍然会遇到相同的错误,我尝试了两种方法,但它们似乎都不起作用。我仍然可以在postman上提出请求,但不能在我的angular应用程序中
public class MyCorsFilter extends CorsFilter {

    public MyCorsFilter() {
        super(configurationSource());
    }

    private static UrlBasedCorsConfigurationSource configurationSource() {
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        config.addAllowedOrigin("http://domain1.com");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        return source;
    }
}
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/api/**")
            .allowedOrigins("http://domain2.com")
            .allowedMethods("PUT", "DELETE")
            .allowedHeaders("header1", "header2", "header3")
            .exposedHeaders("header1", "header2")
            .allowCredentials(false).maxAge(3600);
    }
}