Spring Security似乎正在使用会话,即使我正在使用SessionCreationPolicy.STATELESS

时间:2018-01-07 04:35:03

标签: java spring spring-mvc session spring-security

我正在使用Spring Security来保护使用OAuth的应用程序。我想让它成为无状态,所以我有一个自定义身份验证过滤器,它根据客户端的令牌进行身份验证。我对Spring Security的配置如下:

@Override
protected void configure(HttpSecurity http) throws Exception {
// require https
    http.requiresChannel().antMatchers("/**").requiresSecure().and().portMapper().http(80).mapsTo(443);

    http.antMatcher("/**").authorizeRequests().anyRequest().authenticated().and()
        .cors().and()
        .csrf().disable()
        .addFilterBefore(customOAuth2Filter(), BasicAuthenticationFilter.class)
        .sessionManagement()
        .sessionCreationPolicy(SessionCreationPolicy.STATELESS);

}

正如您所看到的,我使用的是SessionCreationPolicy.STATELESS,这意味着Spring Security从不使用会话。但是,如果我登录然后尝试访问没有令牌的受保护端点(例如,如果我关闭选项卡然后在新选项卡中打开受保护的端点,或者我只是刷新页面),应用程序将给我端点上的数据,而不是让我再次登录。

即使我正在使用SessionCreationPolicy.STATELESS,似乎正在使用会话。但是,我注意到发送的每个请求的JSESSIONID与前一个响应的set-cookie头中的JSESSIONID不匹配。不知道为什么会这样或新的JSESSIONID来自何处。

如何在没有令牌的后续请求中再次请求登录?任何洞察这里发生的事情都将不胜感激,谢谢。

0 个答案:

没有答案