我试图弄清楚Spring轻量级安全的定时注销功能在哪里,以及如何编辑它以使用我的自定义注销方法。 我的理解是存在一个可编辑的定时注销功能,我到目前为止一直无法找到它,如果我这样做,我不确定如何使用我的注销序列。
谢谢, MirroredFate
编辑清晰度:
这是一个web / servlet应用程序。我正在使用acegi安全性。
我现在正在使用Spring会话超时:
In web.xml:
<session-config>
<session-timeout>5</session-timeout>
</session-config>
我需要一种在发生超时时执行某些代码的方法。但是,我不知道如何做到这一点。
如果我无法使用此方法执行代码,我的理解是acegi有办法使会话超时;但是,我也不知道该怎么做。我已经能够使用acegi在正常注销时执行代码:
<security:logout invalidate-session="true"
success-handler-ref="Logout"
logout-url="/logout.html" />
</security:http>
因此,基本上,我如何使用acegi timed logout或会话超时发生同样的事情?
答案 0 :(得分:8)
HttpSessionListener
可能正是您要找的。依赖于Spring的会话管理的问题是,如果用户只是在没有注销的情况下关闭他的浏览器,则永远不会到达invalid-session-url(因为他们从不再发出请求)。
这样的事情:
public class MySessionListner implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent se) {
return; //or maybe do something, depends on what you need
}
public void sessionDestroyed(HttpSessionEvent se) {
HttpSession session = se.getSession();
//do whatever you need to do
}
}
然后在web.xml
:
<listener>
<listener-class>com.foo.MySessionListener</listener-class>
</listener>
这样,每次会话被销毁时都会调用您的代码,而不仅仅是当用户在超时后尝试访问页面时。希望有所帮助。
答案 1 :(得分:2)
会话超时期限由您的应用程序服务器管理(就像您现在在web.xml
中一样)。可以在Spring中指定处理会话超时发生时的操作。例如,Spring 3.0可以指定用户在会话失效后向用户重定向的页面。见下文。
<?xml version="1.0" encoding="UTF-8"?>
<b:beans xmlns:b="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sec="http://www.springframework.org/schema/security"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<sec:http auto-config="true" access-denied-page="/login">
<sec:session-management invalid-session-url="/session-timeout" />
<sec:anonymous enabled="true" />
<sec:intercept-url ... />
<sec:form-login ... />
<sec:logout invalidate-session="true" logout-success-url="/login" />
</sec:http>
<!-- Other bean declarations -->
</b:beans>