如何在Spring安全性中编辑定时注销

Mir*_*ate 2 java spring spring-security logout

我试图弄清楚Spring的轻型安全性的定时注销功能在哪里,以及如何编辑它以使用我的自定义注销方法.我的理解是存在一个可编辑的定时注销功能,我到目前为止一直无法找到它,如果我这样做,我不确定如何使用我的注销序列.

谢谢,MirroredFate

编辑清晰度:

它是一个web/servlet应用程序.我正在使用acegi安全性.

我现在正在使用Spring会话超时:

In web.xml:
<session-config>
    <session-timeout>5</session-timeout>
</session-config>
Run Code Online (Sandbox Code Playgroud)

发生超时时,我需要一种方法来执行一些代码.但是,我不知道如何做到这一点.

如果我无法使用此方法执行代码,我的理解是acegi有一种方法可以使会话超时; 但是,我也不知道该怎么做.我已经能够使用acegi在正常注销时执行代码:

<security:logout invalidate-session="true"
                success-handler-ref="Logout"
                logout-url="/logout.html" />
</security:http>
Run Code Online (Sandbox Code Playgroud)

所以,基本上,我如何使用acegi timed logout或会话超时发生时做同样的事情?

小智 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
     }
 }
Run Code Online (Sandbox Code Playgroud)

然后在web.xml:

 <listener>
      <listener-class>com.foo.MySessionListener</listener-class>
 </listener>
Run Code Online (Sandbox Code Playgroud)

这样,每次会话被销毁时都会调用您的代码,而不仅仅是当用户在超时后尝试访问页面时.希望有所帮助.