无法使用spring security和CORS

时间:2017-04-20 20:29:21

标签: spring-boot spring-security

如何从CORS / Spring安全性中获取x-auth-token

我正在使用Angular 4并且它没有返回x-auth-token。只需Cache-ControlExpiresPragma。在chrome中的网络选项卡中,它确实显示了我的所有响应标头,但我不允许通过Angular的响应方法获取它们Headers in Angular explained

.map((res: any) => {

                let authToken = res.headers.get("x-auth-token");

如果我null,上面只会打印console.log

我在登录时收到403(),直到我在spring-boot的安全性中添加了CORS配置。

由于这样做,我在网络标签中获得200但不允许获取令牌。

CORS配置:

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {

                registry.addMapping("/**").allowedOrigins("*");
//              .allowedHeaders("x-auth-token")
//              .exposedHeaders("x-auth-token");

            }
        };
    }

我不得不发表评论:

 //             .allowedHeaders("x-auth-token")
    //              .exposedHeaders("x-auth-token");

因为我添加它们后会在登录时获得403(),所以我的实施显然是错误的。

1 个答案:

答案 0 :(得分:0)

这里有一个问题。默认情况下,Spring CORS不允许授权。您已获得以下标题,x-auth-token将被传递。

@Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {

                registry.addMapping("/**")
                        .allowedOrigins("*")
                        .allowedHeaders("x-auth-token","Authorization","Access-Control-Allow-Origin","Access-Control-Allow-Credentials")
                        .exposedHeaders("x-auth-token","Authorization","Access-Control-Allow-Origin","Access-Control-Allow-Credentials")
                        .allowCredentials(false).maxAge(3600);

            }
        };
    }