Java 如何使spring引导永远不会发出会话cookie?

Java 如何使spring引导永远不会发出会话cookie?,java,spring,spring-security,Java,Spring,Spring Security,我正在使用SpringBoot开发RESTfulAPI服务器。我将我的项目配置为使用基本身份验证,如下所示 @ComponentScan @EnableAutoConfiguration @EnableWebSecurity @Configuration public class WebSecurityConfig extends WebSecurityConfigurerAdapter { ... @Override protected void configure(H

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

@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插件测试API时,在第一次调用之后,服务器从不需要用户凭证。我注意到“JSESSIONID”cookie被创建了


我的项目中没有其他安全配置。我想知道为什么会发生这种情况……

您是否尝试过使用
SessionCreationPolicy.STATELESS
。在以下方面,
无状态
从不
之间存在细微差别:

无状态
:Spring Security永远不会创建
HttpSession
,也永远不会使用它来获取
SecurityContext

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

因此,我建议您清除所有cookie,将其切换为无状态,然后重试。这可能是因为当您切换到
NEVER
时,您已经有了一个
HttpSession
,这对我来说很有用 “因此,我建议您清除所有Cookie,将其切换为无状态,然后重试。可能是您在切换为“从不”时已经有了HttpSession。”


我使用了以下选项

.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
.formLogin().disable()
.httpBasic().disable()
.logout().disable()
获取错误 localhost重定向您的次数太多了

我在清理饼干后试过了。 但当我删除以下选项/行时 .sessionManagement().sessionCreationPolicy(sessionCreationPolicy.STATELESS)和()。。。 它工作得很好。这是针对oauth2login()的。可能是oauth2login()需要此会话状态。原因是什么

当我没有这个的时候 .sessionManagement().sessionCreationPolicy(sessionCreationPolicy.STATELESS)和()。。。 然后,它使用cookie。我使用GoogleAuth,因此,一旦我登录,它允许后续调用,而无需验证。 所有这些行为听起来都是合理的,正如预期的那样


出于安全考虑,一位专家告诉我,关闭cookies。除了关闭会话,我不知道这意味着什么…

您的配置类是否扩展了WebSecurityConfigureAdapter?是的。我编辑了我的代码片段。我想确保我的api服务器不管理任何会话。好的,首先,让我们验证身份验证是否强制执行。您能否尝试用以下内容替换您的配置:http.csrf().disable().authorizeRequests().anyRequest().authorized()。对于有关模糊性的警告,我们深表感谢。如果我想使用会话,但不想让spring security创建会话,该怎么办?我使用了无状态,但收到的错误localhost将您重定向了太多次。我也在清理饼干后试过了。我用了所有这些。但是除了会话管理之外,其他一切都很好。csrf().disable().sessionManagement().sessionCreationPolicy(sessionCreationPolicy.STATELESS).和().formLogin().disable().httpBasic().disable().logout().disable()
.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
.formLogin().disable()
.httpBasic().disable()
.logout().disable()