当前位置: 首页 > 知识库问答 >
问题:

Spring security+session:接收“set-cookie”头,但未在浏览器中设置

叶文博
2023-03-14

我正在尝试Spring Security&Session和一个棱角分明的前端。当尝试使用响应头登录时,我得到一个200代码:

Set-Cookie: SESSION=NGJlYTkzODQtNTQzMy00NGIxLWEzOWYtYTc2MGNlZWY1OTJm; Path=/; HttpOnly; SameSite=Lax

但在我对服务器的下一个请求中,请求中没有自动设置cookie。顺便说一下,我在开发工具中看不到cookie,所以我认为它没有保存。

我在本地工作的前端和后端。

以下是有关后端的一些信息:

>

  • 使用Spring MongoDb会话@Configuration@EnableMongoHttpSession公共类SessionConfig{}

    • 经典Spring Security配置

    `@EnableWebSecurity公共类SecurityConfig扩展WebSecurityConfigurerAdapter{private final CustomAuthenticationProvider AuthProvider;

    public SecurityConfig(CustomAuthenticationProvider authProvider) {
        this.authProvider = authProvider;
    }
    
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(authProvider);
    }
    
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .cors().and()
            .authorizeRequests()
            .anyRequest().authenticated()
            .and()
            .httpBasic(); //todo csrf
    }
    
    @Bean
    CorsConfigurationSource corsConfigurationSource() {
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOrigins(Collections.singletonList("http://localhost:4200")); // todo properties by environment
        configuration.setAllowedMethods(Arrays.asList("GET", "POST", "OPTIONS", "DELETE", "PUT", "PATCH"));
        configuration.setAllowedHeaders(Arrays.asList("X-Requested-With", "Origin", "Content-Type", "Accept", "Authorization"));
        configuration.setAllowCredentials(true);
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }
    

    }`

    会话很好地保存在mongodb中,只是没有保存在浏览器中的id。知道吗?

    编辑

    在httpClient参数中设置observer:“response”时,我看不到Set-Cookie头:

    “cache-control:no-cache,no-store,max-age=0,must-revalidate,content-type:application/json,expires:0,pragma:no-cache”

    但在开发人员工具中,我有:

    HTTP/1.1 200 vary:Origin:Access-Control-Request-Method vary:Access-Control-Request-Headers access-control-allow-origin:http://localhost:4200 access-control-allow-credentials:true x-content-type-options:nosniff x-xss-protection:1;mode=blockcache-control:no-cache,no-store,max-age=0,must-revalidate pragma:no-cache过期:0 x-frame-options:DENY set-cookie:session=ytewotnknjatzji4ms00zmm2lwexymetyza5nzjhmjayntjh;路径=/;HttpOnly;samesite=lax content-type:application/json transfer-encoding:chunked date:Mon,01 Jul 2019 11:25:08 GMT

  • 共有1个答案

    苏波涛
    2023-03-14

    问题在角边!我添加了一个拦截器,添加了withCredentials参数,它可以工作。

    @Injectable()
    export class XhrInterceptor implements HttpInterceptor {
    
      intercept(req: HttpRequest<any>, next: HttpHandler) {
        const xhr = req.clone({
          withCredentials: true
        });
        return next.handle(xhr);
      }
    }
    
     类似资料:
    • 我在试Spring保安 但是在我对服务器的下一个请求中,没有在请求中自动设置cookie。顺便说一句,我在开发人员工具中看不到cookie,所以我认为它没有保存。 我在当地为前线工作 以下是有关后端的一些信息: > 使用Spring MongoDb会话配置@EnableMongoHttpSession公共类会话配置{} 经典Spring Security配置 `@EnableWebSecurity

    • 我有一个PHP脚本,它成功地返回一些简单的头以及一个set-cookie头,如果在浏览器中直接调用(或由邮递员)。我可以从chrome DevTools上读到这样的响应标题。但是当我用Axios调用它时,set-cookie头就不会显示出来,浏览器中也没有保存cookie。 我尝试了不同的方法,比如在服务器端更改响应头,并在axios中使用“with Credentials:true”,但都不起作

    • 问题内容: 我正在使用Angularjs。当我设置标头时,在Chrome上出现以下错误: 但是,该请求已包含在请求中,并已成功发送到服务器。我似乎已经正确配置了所有内容以允许服务器和客户端上的标头: 对于服务器,我有以下这些: 对于客户,我指定了这些: 为什么会出现此错误? 问题答案: 您从Chrome浏览器中收到该错误,因为根据XHR规范,该方法不应使用禁止的标头名称设置标头。 根据规范: 这些

    • 在postman中,当我向服务器发出请求时,我会得到以下响应头: 如何在Express中查看这些标题?我在之前暂停了这个请求的服务器,但我得到的只有一个标题: 我特别希望看到服务器发送到浏览器的cookie。如何在调试时查看express中的所有响应标头?

    • 即使响应包含ajax请求的“设置cookie”头,cookie也不会存储在浏览器上。 请求代码: 收到的响应标题: 访问控制允许凭据:true 访问控制允许标头:X-request-With、accept、内容类型、Cookie 访问控制允许方法:POST、GET、PUT、OPTIONS、DELETE 访问控制允许来源:http://myapp2.com:7011 访问控制最大年龄:3600 内容

    • 我正在使用swt。浏览器包,允许用户在我的应用程序中使用Facebook登录。但是,当用户登录时,会话/cookie存储在磁盘上。我的目标是删除所有会话/cookie。通过浏览器清除会话。clearSessions()没有帮助,因为Facebook身份验证密钥(或类似密钥)很可能存储为cookie。 在网上和(瘦)文档中搜索了几个小时,我找不到一种方法来清除实例的cookies。 <代码>浏览器。