如何使spring boot永远不会发出会话cookie?

时间:2014-10-15 16:00:55

标签: java spring spring-security

我正在使用spring boot开发Restful API服务器。我将项目配置为使用基本身份验证,如下所示。

@ComponentScan
@EnableAutoConfiguration
@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    ...
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER).and()
            .csrf().disable()
            .authorizeRequests().anyRequest().hasRole("USER").and()
            .httpBasic();
    }
    ...
}

但是当我通过Chrome-Postman-Plugin测试API时,首次调用后,服务器永远不需要用户凭据。而且我注意到' JSESSIONID' cookie已创建。

我的项目中没有其他安全配置。我想知道为什么会这样......

3 个答案:

答案 0 :(得分:31)

您是否尝试过使用SessionCreationPolicy.STATELESSspring docs中的STATELESSNEVER之间存在细微差别:

STATELESS:Spring Security永远不会创建HttpSession,它永远不会使用它来获取SecurityContext

NEVER:Spring Security永远不会创建HttpSession,但会使用HttpSession(如果它已经存在)

因此,我建议您清除所有Cookie,将其切换为STATELESS然后重试。当您切换到HttpSession时,可能已经有NEVER

答案 1 :(得分:2)

对我有用 “所以我建议您清除所有cookie,将其切换为STATELESS,然后重试。可能是您切换为NEVER时已经有了HttpSession。”

/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-/(/)]).{8,20}$/

答案 2 :(得分:0)

我使用了以下选项

.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
.formLogin().disable()
.httpBasic().disable()
.logout().disable()

获取错误 本地主机将您重定向了太多次

我在清除cookie后尝试了。 但是当我删除以下选项/行时 .sessionManagement()。sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()... 效果很好。这用于oauth2login()。可能是oauth2login()需要此会话状态。可能是什么解释?

当我没有这个时 .sessionManagement()。sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()... 然后,它使用cookie。我使用的是google auth,因此,一旦我登录,它便允许后续呼叫而无需进行身份验证。 所有这些行为听起来都是合理的,符合预期。

出于安全原因,一位专家告诉我,请关闭Cookie。除了关闭会话外,我不知道这意味着什么。