编程语言
首页 > 编程语言> > java-在使用Spring Security注销用户之前调用一些逻辑?

java-在使用Spring Security注销用户之前调用一些逻辑?

作者:互联网

这个问题已经在这里有了答案:            >            spring custom logout filter to perform some action before logs out?                                    1个
我正在使用spring-security3.x.我有一个要求,在用户注销之前,我要执行一些逻辑.我写了一个过滤器来扩展spring提供的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);

   }

}

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

解决方法:

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

>任意数量的自定义LogoutHandlers(javadoc here)
>自定义LogoutSuccessHandler(javadoc here)

请注意,在LogoutSuccessHandler之前调用LogoutHandlers,但是允许后者引发异常,而不应允许前者.

还要注意,如果您使用自定义LogoutHandler,则需要将它们提供给/注入LogoutFilter和ConcurrentSessionFilter(如果使用)中.

如果您在XML配置中使用安全名称空间(即xmlns =“ http://www.springframework.org/schema/security”),则可以通过以下方式轻松添加自定义LogoutSuccessHandler

<http>
    ...
    <logout success-handler-ref="yourBeanId"/>
</http>

不确定如何使用名称空间插入自定义LogoutHandlers.

否则,它将看起来像这样:

<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>

标签:spring-security,spring,java
来源: https://codeday.me/bug/20191123/2065786.html