Spring Security返回403而不是401,并创建无效的Redis会话cookie



我使用Spring Security和Spring Data Redis来跟踪具有自定义角色和权限的用户会话。当我尝试在浏览器中没有会话cookie的情况下访问预授权端点时,它应该返回401。而是创建一个新的(无效的(会话cookie,并且端点返回403。

这是我的SecurityConfig:

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests((authorize) -> authorize.anyRequest().authenticated())
.csrf().disable().cors();
}
}

我还使用MethodSecurityConfigUserDetails的实现来解析来自用户身份验证的自定义字段。

以下是针对任何遇到类似问题的人的修复方法:

@Override
protected void configure(HttpSecurity http) throws Exception {
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER).and()   //let redis handle session creation
.csrf().disable().cors().and()
.requestCache().disable().exceptionHandling().and()                         //prevent exception creating duplicate session
.authorizeRequests().anyRequest().authenticated().and()                     //all endpoints need auth
.exceptionHandling().authenticationEntryPoint(
new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED));                 //return 401 on no session
}

相关内容

  • 没有找到相关文章

最新更新