java - spring 自定义注销过滤器在注销之前执行某些操作?

标签 java spring spring-security

我正在使用 Spring Security 3.0。我只需要在用户注销之前执行一些逻辑。

是否可以通过重写 Spring Security 的 LogoutFilter 类来实现这一点?

最佳答案

有很多方法可以做到这一点。我会告诉你我会考虑的两个。

1)创建我自己的过滤器来完成我需要的事情。这里的关键点是,如果您创建一个过滤器,您还必须告诉 Spring Security 将其放入“过滤器链”中,即您的请求为了执行 auth* 操作而经过的过滤器链。 Check this documentation更详细地了解如何将过滤器插入正确的位置,但它看起来像

<http>
    <custom-filter before="LOGOUT_FILTER" ref="cleanupFilter" />
</http>

<beans:bean id="cleanupFilter" class="com.CleanupFilter"/>

请记住,通过子类化 LogoutFilter 您仍在创建自定义过滤器,因此同样的情况也适用。

2) 如果我的自定义逻辑不仅可以在用户注销之前执行,而且可以在用户注销之后稍稍执行,请考虑使用 SecurityContextLogoutHandler (查看 B.1.13 节中的文档)这将为您提供一个钩子(Hook)点,以便在用户成功注销时执行自定义逻辑。

<http>
    <logout success-handler-ref="myLogoutSuccessHandler"/>
</http>

关于java - spring 自定义注销过滤器在注销之前执行某些操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16940017/

相关文章:

java - JDBC MySQL自动将localhost转为127.0.0.1

java - 无法连接到 ssl 服务器收到致命警报 : certificate_unknown and ReadDataRecord(SSLSocketImpl

java - 如何在spring mvc中使 session 失效以实现注销

java - 为什么更改整个数组行会产生奇怪的行为?

java - org.codehaus.jackson.map.JsonMappingException : Conflicting setter definitions for property "matchColumn": com. sun.rowset.JdbcRowSetImpl

java - 在 Spring MVC 中创建的模型对象到底在哪里?

java - 如何使用spring AOP切入点表达式拦截返回类型List

java - 为什么默认的Spring Security策略是AffirmativeBased?

redis 的 spring-boot 安全共享 session

java - Spring 安全+休息不起作用