我正在使用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。
我的项目中没有其他安全配置。我想知道为什么会这样...
4条答案
按热度按时间evrscar21#
你有没有试过用
SessionCreationPolicy.STATELESS
。在spring docs中,STATELESS
和NEVER
之间有一个细微的区别:STATELESS
:Spring安全性永远不会创建HttpSession
,也永远不会使用它来获取SecurityContext
。NEVER
:Spring安全性永远不会创建HttpSession
,但如果HttpSession已经存在,则会使用它。所以我建议你清除所有的cookies,切换到
STATELESS
,然后再试一次。这可能是因为您在切换到NEVER
时已经有了HttpSession
。g6ll5ycj2#
它对我很有效“所以我建议你清除所有的cookie,切换到无状态,然后再试一次。这可能是因为当你切换到NEVER时,你已经有了一个HttpSession。
字符串
ou6hu8tu3#
我使用了以下选项
字符串
获取错误localhost重定向您的时间太多
我清理完饼干后试过了。但是当我删除下面的选项/行时。会话管理()。会话创建策略(会话创建策略.无状态)。和()...效果不错。这是针对oauth2 login()的。可能是oauth2 login()需要此会话状态。这是怎么解释的呢?
当我没有这个.会话管理().会话创建策略(会话创建策略.无状态).和()...然后,它会使用Cookie。我使用谷歌认证,所以,一旦我登录,它允许后续调用,而不需要认证。所有这些行为听起来都是合理的,正如预期的那样。
出于安全原因,一位Maven告诉我,要关闭cookies。我不知道这意味着什么,除了关闭会话...
qrjkbowd4#
Spring 6弃用
http.sessionManagement()
,并计划在Spring 7中删除它。替换很简单:
字符串
smc
是SessionManagementConfigurer<HttpSecurity>
的instance