Java 如何在Spring security中编辑定时注销

Java 如何在Spring security中编辑定时注销,java,spring,logout,spring-security,Java,Spring,Logout,Spring Security,我试图找出Spring的light security的定时注销功能的位置,以及如何编辑它以使用我的自定义注销方法。 我的理解是,确实存在一个可编辑的定时注销功能,我到目前为止还无法找到它,如果我找到了,我不确定如何使用我的注销序列 谢谢, 镜像命运 为清晰起见,请编辑: 它是一个web/servlet应用程序。我正在使用acegi安全性 我现在正在使用Spring会话超时: In web.xml: <session-config> <session-timeout>

我试图找出Spring的light security的定时注销功能的位置,以及如何编辑它以使用我的自定义注销方法。 我的理解是,确实存在一个可编辑的定时注销功能,我到目前为止还无法找到它,如果我找到了,我不确定如何使用我的注销序列

谢谢, 镜像命运

为清晰起见,请编辑:

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

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

In web.xml:
<session-config>
    <session-timeout>5</session-timeout>
</session-config>
web.xml中的
:
5.
我需要一种方法来执行一些代码时,这个超时发生。然而,我不知道该怎么做

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

<security:logout invalidate-session="true"
                success-handler-ref="Logout"
                logout-url="/logout.html" />
</security:http>


因此,从本质上讲,我如何使用acegi定时注销或在会话超时时执行相同的操作?

会话超时时间由应用程序服务器管理(就像您现在在
web.xml
中所做的那样)。可以在Spring中指定会话超时发生时的处理。例如,Spring3.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>

您可能正在寻找
HttpSessionListener
。依赖Spring会话管理的问题在于,如果用户只是关闭浏览器而不注销,那么将永远无法访问无效的会话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>

com.foo.MySessionListener

这样,您的代码将在每次会话被破坏时被调用,而不仅仅是在用户超时后试图访问页面时。希望这能有所帮助。

我想澄清一下,你是在说会话计时器吗?e、 一个倒计时的计时器,当它完成时,结束用户的会话?啊,也许。。。这或多或少就是我所指的。。。据我所知,Spring安全性附带了这个功能(我真的不太了解Spring),可以设置时间量,以及在时间用完时做什么。我想知道具体怎么做。这说明了吗?什么类型的申请?web/servlet?GUI、桌面等?需要更多的细节来帮助您。这是一个web/servlet应用程序。只要告诉我什么信息会有用,我会给出它。这是应该去哪里与应用程序有关?我的意思是,它是在web.xml中,还是在应用程序上下文中,或者…*叹气*。。。不管怎样,谢谢你的回答。你可能有一个类似于
${app.name}-servlet.xml
的文件。听起来您知道如何创建单独的上下文文件(即
application context.xml
)。有关于如何将安全上下文分离到第三个文件的文档。看…我在心里把这件事复杂化了,我想。。。我理解设置无效的会话url,但是如何让它使用我的自定义代码,就像它用于注销功能一样?我需要给它一个注销bean的引用,你知道怎么做吗?如果我已经回答了你原来的问题,请标记为已回答。您询问是否有任何方法覆盖或添加股票注销的附加功能?我不确定,因为我不需要自己做。我建议阅读SpringSecurity3.0文档。您可能需要创建一个注销过滤器。是的,我正在阅读文档。我想我会把这个问题标记为已回答,尽管它并没有真正得到回答。我的问题是关于如何执行代码,而您的答案似乎是关于在发生超时时如何更改重定向。这是朝着正确方向迈出的一步,非常有帮助,因此我将把它作为答案。我想,这就是我一直在寻找的。w00t!如果我没有选择其他人的答案,我会选择这个。@MirroredFate我想你可以把答案换成这个。它确实能更好地回答你的问题。(我发现它也很有用)