【问题标题】:LogoutSuccessHandler doesn't work for Spring SecurityLogoutSuccessHandler 不适用于 Spring Security
【发布时间】:2015-10-02 09:09:45
【问题描述】:

我不能使用 Spring Security LogoutSuccessHandler 但只能在我当前的项目中使用。以前,一切都正常工作,但现在没有使用。

这是课程:

import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.logout.SimpleUrlLogoutSuccessHandler;
import org.springframework.stereotype.Component;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Component("customLogoutSuccessHandler") //or implements LogoutSuccessHandler
public class CustomLogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler {
    @Override
    public void onLogoutSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException {
        System.err.println("LOGOUT HANDLER HERE");
    }
}

这是我的 xml 配置

<security:http auto-config="false" >               
           <security:logout logout-url="/logout" success-handler-ref="customLogoutSuccessHandler"/>
           <security:form-login login-page="/login" default-target-url="/"/>
           <security:csrf/>
</security:http>

代码有什么问题?即使我已注销,onLogoutSuccess 方法也永远不会运行:

@RequestMapping(value = "/logout")
public String logout(){
    SecurityContextHolder.clearContext();
    return "redirect:/";
}

为什么?

【问题讨论】:

标签: spring security handler logout


【解决方案1】:

您在 logout() 方法中没有做太多事情,因此删除它可能更容易 - /logout 是 Spring Security 中的默认注销 url,它应该为您服务(清除上下文)。您可能正在使用 redirect:/ 破坏过滤器链

【讨论】:

  • 是的,但问题是,当我删除方法映射/注销(从控制器)时,什么也没有发生,我无法注销。我不知道为什么。添加 /logout 映射方法是我发现的唯一注销方法。我还评论了该方法,并且 onLogoutSuccess 方法仍然没有被执行
  • /logout 默认使用 POST。看看这里stackoverflow.com/questions/24108585/…
  • 天哪,这就是问题所在。谢谢@freakman 顺便说一句,你知道如何用 xml 配置它吗?我当然可以使用表单,但它创建了样板代码,使用 GET 会更方便
  • 对不起,很久以前离开 xml 世界了 :)
  • 仍然有很多人使用 XML,因为它更具可读性。到目前为止,我只使用了 javaconfig,现在创建了 xml 项目,但不知道为什么需要 javaconfig?它解决了什么问题?
猜你喜欢
  • 1970-01-01
  • 2021-03-25
  • 2015-11-03
  • 1970-01-01
  • 2014-11-29
  • 2020-12-02
  • 2016-04-16
  • 2017-08-07
  • 2016-03-13
相关资源
最近更新 更多