在使用spring security注销用户之前调用某些逻辑?

时间:2013-06-05 14:29:14

标签: java spring spring-security

我正在使用spring-security 3.x.我有一个要求,在用户注销之前,我想执行一些逻辑。我写了一个过滤器扩展弹簧LogoutFilter,如下所示。

public class MyFilter extends LogoutFilter{

  public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
            throws IOException, ServletException {
        //Perform some logic 

          super.doFilter(req,res,chain);

   }

}

当用户点击注销按钮时,如何调用我自己的过滤器?

1 个答案:

答案 0 :(得分:3)

您不需要自定义LogoutFilter,您需要将以下其中一项插入标准过滤器:

请注意LogoutHandlerLogoutSuccessHandler之前被调用,但后者被允许抛出异常,而前者不应该。{/ p>

另请注意,如果您使用自定义LogoutHandler,则需要在LogoutFilter ConcurrentSessionFilter(如果使用)中注明/注入这些内容

如果您在XML配置中使用安全命名空间(即xmlns="http://www.springframework.org/schema/security"),则可以通过

轻松添加自定义LogoutSuccessHandler
<http>
    ...
    <logout success-handler-ref="yourBeanId"/>
</http>

不确定如何使用命名空间插入自定义LogoutHandler

否则,它看起来像这样:

<bean id="logoutFilter" class="org.springframework.security.web.authentication.logout.LogoutFilter">
    <constructor-arg ref="logoutSuccessHandler"/>
    <constructor-arg ref="logoutHandlers"/>
    ...
</bean>

<bean id="logoutSuccessHandler" class="your.custom.LogoutSuccessHandler"/>

<bean id="logoutHandlers" class="java.util.Arrays" factory-method="asList">
    <constructor-arg>
        <array>
            <bean class="your.custom.LogoutHandler"/>
            ...
        </array>
    </constructor-arg>
</bean>