Java 如何使spring引导永远不会发出会话cookie?
我正在使用SpringBoot开发RESTfulAPI服务器。我将我的项目配置为使用基本身份验证,如下所示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
@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()