Java 如何在Spring security中编辑定时注销
我试图找出Spring的light security的定时注销功能的位置,以及如何编辑它以使用我的自定义注销方法。 我的理解是,确实存在一个可编辑的定时注销功能,我到目前为止还无法找到它,如果我找到了,我不确定如何使用我的注销序列 谢谢, 镜像命运 为清晰起见,请编辑: 它是一个web/servlet应用程序。我正在使用acegi安全性 我现在正在使用Spring会话超时: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>
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我想你可以把答案换成这个。它确实能更好地回答你的问题。(我发现它也很有用)