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

标签 java spring spring-security

<分区>

我正在使用 spring-security 3.x。我有一个要求,就在用户注销之前,我想执行一些逻辑。我写了一个过滤器扩展 spring provided 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,您需要将以下其中一项插入标准过滤器:

请注意,LogoutHandlerLogoutSuccessHandler 之前被调用,但后者允许抛出异常,而前者则不允许。

另请注意,如果您使用自定义 LogoutHandler,则需要将这些提供给/注入(inject)到 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>

关于java - 在使用 spring security 注销用户之前调用一些逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16942627/

相关文章:

spring - @PathVariable 不与 @RequestBody 绑定(bind)

java - spring openid +记住我

java - 我应该将 ACL 表插入我的数据库还是创建一个单独的数据库?

java - 如何使用 Gson 将 JSON 转换为 HashMap?

java - 通过 opencsv 在文件末尾写入

java - 在点阵上打印 -- 无字符/字母间距(从 java 应用程序打印)

java - Spring keystore bean

java - 尝试将 UTF-8 文本写入文本文件时出现编译错误

java - spring mvc 是否有 response.write 可以直接输出到浏览器?

authentication - 在Grails应用程序中针对TOTP或其他多因素身份验证的完美解决方案?