我正在使用 spring/spring-security 3.1 并希望在用户注销时(或者如果会话超时)采取一些措施。我设法完成了注销操作,但由于会话超时,我无法正常工作。
在 web.xml 中,我只指定了 ContextLoaderListener(这可能是问题所在吗?),当然还有 DelegatingFilterProxy。
我像这样使用自动配置。
<security:http auto-config="false" use-expressions="false">
<security:intercept-url pattern="/dialog/*"
access="ROLE_USERS" />
<security:intercept-url pattern="/boa/*"
access="ROLE-USERS" />
<security:intercept-url pattern="/*.html"
access="ROLE-USERS" />
<security:form-login login-page="/auth/login.html"
default-target-url="/index.html" />
<security:logout logout-url="/logout"
invalidate-session="true"
delete-cookies="JSESSIONID" success-handler-ref="logoutHandler" />
</security:http>
<bean id="logoutHandler" class="com.bla.bla.bla.LogoutHandler">
<property name="logoutUrl" value="/auth/logout.html"/>
</bean>
注销处理程序在用户单击注销时被调用,这将对数据库进行一些调用。
但是我该如何处理会话超时???
处理它的一种方法是在用户登录时将用户名注入会话,然后使用普通的 httpsessionlistener 并在会话超时时执行相同的操作。
spring security 是否有类似的方法,以便当 spring 发现会话超时时,我可以在那里挂钩,访问身份验证并从那里获取 UserDetails 并进行清理。
原文由 Perre 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个更简单的解决方案。这适用于注销和会话超时。
网站.xml: