spring 如何让Sping Boot 从不发出Session Cookie?

nwnhqdif  于 2023-08-02  发布在  Spring
关注(0)|答案(4)|浏览(274)

我正在使用Sping 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。
我的项目中没有其他安全配置。我想知道为什么会这样...

evrscar2

evrscar21#

你有没有试过用SessionCreationPolicy.STATELESS。在spring docs中,STATELESSNEVER之间有一个细微的区别:
STATELESS:Spring安全性永远不会创建HttpSession,也永远不会使用它来获取SecurityContext
NEVER:Spring安全性永远不会创建HttpSession但如果HttpSession已经存在,则会使用它
所以我建议你清除所有的cookies,切换到STATELESS,然后再试一次。这可能是因为您在切换到NEVER时已经有了HttpSession

g6ll5ycj

g6ll5ycj2#

它对我很有效“所以我建议你清除所有的cookie,切换到无状态,然后再试一次。这可能是因为当你切换到NEVER时,你已经有了一个HttpSession。

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
            .csrf().disable()
            .authorizeRequests()
            .anyRequest()
            .authenticated().and().httpBasic();

}

字符串

ou6hu8tu

ou6hu8tu3#

我使用了以下选项

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

字符串
获取错误localhost重定向您的时间太多
我清理完饼干后试过了。但是当我删除下面的选项/行时。会话管理()。会话创建策略(会话创建策略.无状态)。和()...效果不错。这是针对oauth2 login()的。可能是oauth2 login()需要此会话状态。这是怎么解释的呢?
当我没有这个.会话管理().会话创建策略(会话创建策略.无状态).和()...然后,它会使用Cookie。我使用谷歌认证,所以,一旦我登录,它允许后续调用,而不需要认证。所有这些行为听起来都是合理的,正如预期的那样。
出于安全原因,一位Maven告诉我,要关闭cookies。我不知道这意味着什么,除了关闭会话...

qrjkbowd

qrjkbowd4#

Spring 6弃用http.sessionManagement(),并计划在Spring 7中删除它。
替换很简单:

http.sessionManagement(smc -> smc.sessionCreationPolicy(SessionCreationPolicy.STATELESS));

字符串
smcSessionManagementConfigurer<HttpSecurity>的instance

相关问题