我正在使用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已创建。
我的项目中没有其他安全配置。我想知道为什么会这样......
答案 0 :(得分:31)
您是否尝试过使用SessionCreationPolicy.STATELESS
。 spring docs中的STATELESS
和NEVER
之间存在细微差别:
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。除了关闭会话外,我不知道这意味着什么。