我正在使用 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 发现会话超时时,我可以挂在那里,访问 Authentication 并从那里获取 UserDetails 并进行清理。