当前位置: 首页 > 知识库问答 >
问题:

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

袁永贞
2023-03-14

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

这是我的安全配置:

@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();
    }
}

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

共有1个答案

金伟
2023-03-14

对于任何遇到类似问题的人来说,解决办法是:

    @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
    }
 类似资料:
  • 我已经实现了JWT认证和授权。一切都很好,除了未经授权的场景 未经授权的情况:在不提供授权令牌的情况下对路由进行http调用。 结果:禁止403例,未批准403例 以下是我的完整课程: 备注: 我在UsernamePasswordAuthenticationFilter中遇到了同样的问题,我通过重写默认的AuthenticationFailureHandler解决了这个问题:

  • 问题内容: 随着spring引导 1.5.6.RELEASE我能够发送HTTP状态代码,而不是在描述如何让春天的安全响应未经授权(HTTP 401码)如果请求URI不进行认证,这样做: 使用课程。 我刚刚升级到Spring Boot 2.0.0.RELEASE,发现不再有此类(至少在该软件包中)。 问题: Spring Boot中是否存在此类()? 如果不是,那么在现有项目中保持相同行为,以便与依

  • 我试图通过spring boot学习Spring Security的基础知识,我创建了一个项目,其中还包括postgresql设置。Postgresql部分按预期工作。 问题是,在我通过正确的凭据访问安全endpoint后,我只是试图使用正确的用户名和错误的密码进行访问,并期待401错误,但返回200。并返回endpoint的内容。 如果我使用和进行基本身份验证请求,则响应为401 UnAutho

  • org.openqa.selenium.SessionNotCreatedException:无法创建新会话。(原始错误:命令失败:C:\Windows\system32\cmd.exe/s/C“C:\Program Files(x86)\Android\Android sdk\platform tools\adb.exe”-s 69c7aa170104安装“C:\Program Files(x8

  • 我在使用Java客户端库(google-api客户端版本1.13.2-beta,google-api服务-日历版本v3-rev 26-1.13.2-beta)对Google日历API v3进行身份验证时遇到问题。 我们有一个marketplace应用程序,安装该应用程序应为其提供读取(和写入)Google日历事件所需的凭据。 我们使用2腿OAuth 1.0,带有Hmac,这意味着不需要代币。这正是

  • 当web会话过期时,Spring Security将以403 HTTP状态进行响应。理想情况下,它会以401作为回应。未经授权和禁止是不同的。只有在存在有效会话的情况下,对安全资源的请求才应返回403,但用户只是没有对所述资源的权限。如果资源是安全的,并且没有经过身份验证的会话,那么Spring Security应该返回401。 我的应用程序需要非常具体地区分这两个错误代码。 我的问题是,我如何定