spring security自定义注销处理程序

dev*_*v23 21 java spring spring-security

如何在spring-security中将自己的注销处理程序添加到LogoutFilter?谢谢!

Chr*_*ler 22

以下解决方案适用于我,可能会有所帮助:

  1. 扩展SimpleUrlLogoutSuccessHandler或实现LogoutHandler:

    public class LogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler {
    
       // Just for setting the default target URL
       public LogoutSuccessHandler(String defaultTargetURL) {
            this.setDefaultTargetUrl(defaultTargetURL);
       }
    
       @Override
       public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
    
            // do whatever you want
            super.onLogoutSuccess(request, response, authentication);
       }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 添加到Spring安全配置:

    <security:logout logout-url="/logout" success-handler-ref="logoutSuccessHandler" />
    <bean id="logoutSuccessHandler" class="your.package.name.LogoutSuccessHandler" >
        <constructor-arg value="/putInYourDefaultTargetURLhere" />
    </bean>
    
    Run Code Online (Sandbox Code Playgroud)

  • 他要求`LogoutHandler`而不是`LogoutSuccessHandler` (6认同)

Bor*_*ner -1

您应该使用元素success-handler-ref的属性<logout>

<security:logout invalidate-session="true"
          success-handler-ref="myLogoutHandler"
          logout-url="/logout" />
Run Code Online (Sandbox Code Playgroud)

作为替代解决方案,您可以在注销 URL 上配置您自己的过滤器。

  • 您不能同时使用 logout-url 和 success-handler-ref。 (3认同)
  • successHandler 和 logoutHandler 是两个不同的东西。有时您需要自定义 LogoutHandler (因为它在 LogoutSuccessHandler 之前运行) (3认同)
  • @Neuquino,你应该实现`org.springframework.security.web.authentication.logout.LogoutHandler` (2认同)