无法使用 Spring 安全/注销资源 [关闭]

Posted

技术标签:

【中文标题】无法使用 Spring 安全/注销资源 [关闭]【英文标题】:Can't use Spring security /logout resource [closed] 【发布时间】:2021-03-16 16:47:51 【问题描述】:

我有一个 Spring Security 应用程序。当我尝试通过我的 Angular 前端注销时,我会收到 404(未找到)。

我已经尝试了许多 spring WebSecurityConfigurerAdapter 配置,但我得到了一个 404。我正在使用 POST 来提出我的请求。(见下文)

logout() 
    this.http.post('/logout', "").pipe(
      finalize(() => 
        this.app.authenticated.next(false);
      )
    ).subscribe();
  

使用 Postman,我在尝试访问资源时收到 403(禁止)

【问题讨论】:

请贴出导致错误的代码 显示你的 Spring Security 配置。 【参考方案1】:

其实你需要的只是添加一个注销成功处理程序

  @Component
public class LogoutSuccess implements LogoutSuccessHandler 

@Override
public void onLogoutSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication)
        throws IOException, ServletException 
    if (authentication != null && authentication.getDetails() != null) 
        try 
            httpServletRequest.getSession().invalidate();
            // you can add more codes here when the user successfully logs
            // out,
            // such as updating the database for last active.
         catch (Exception e) 
            e.printStackTrace();
            e = null;
        
    

    httpServletResponse.setStatus(HttpServletResponse.SC_OK);




并将成功处理程序添加到您的安全配置中

http.authorizeRequests().anyRequest().authenticated().and().logout().logoutSuccessHandler(logoutSuccess).deleteCookies("JSESSIONID").invalidateHttpSession(false).permitAll();

或者你也可以试试这个:

 logout() 
    this.http.post('/logout').pipe(
      finalize(() => 
        this.app.authenticated.next(false);
      )
    ).subscribe();
  

【讨论】:

如果答案解决了您的问题,请投票。谢谢!

以上是关于无法使用 Spring 安全/注销资源 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Security 无状态(jwt 令牌)中注销用户?

Spring security - 无法注销

Spring Security 无法注销

寻找一个简单的 Spring 安全示例 [关闭]

使用 Spring MVC 和 Spring Security 进行 404 注销

Spring安全中的登录注销用例