Java 在会话超时时删除自定义cookie
在我的应用程序中,在登录时,我正在创建一个cookie(AAA)。注销时,我可以删除cookie。在自动会话超时时,将用户重定向到登录页面,但无法删除(过期)cookie(AAA)。我在应用程序中使用JBossAS7.1、spring-3.1和spring安全性 以下是my security.xml中的http标记配置Java 在会话超时时删除自定义cookie,java,spring,cookies,spring-security,session-timeout,Java,Spring,Cookies,Spring Security,Session Timeout,在我的应用程序中,在登录时,我正在创建一个cookie(AAA)。注销时,我可以删除cookie。在自动会话超时时,将用户重定向到登录页面,但无法删除(过期)cookie(AAA)。我在应用程序中使用JBossAS7.1、spring-3.1和spring安全性 以下是my security.xml中的http标记配置 <http auto-config="true" use-expressions="true" entry-point-ref="customLoginUrlAuthent
<http auto-config="true" use-expressions="true" entry-point-ref="customLoginUrlAuthenticationEntryPoint" disable-url-rewriting="true">
<request-cache ref="httpSessionRequestCache"/>
<session-management invalid-session-url="/ctx/login?invalid-session=true" session-authentication-error-url="/ctx/login?session-auth-error=true">
<concurrency-control max-sessions="1" expired-url="/ctx/login?expired=true" error-if-maximum-exceeded="true" />
</session-management>
<form-login authentication-success-handler-ref="customAuthenticationSuccessHandler"
authentication-failure-handler-ref="customPageHandler"
login-processing-url="/j_spring_security_check"/>
<custom-filter before="ANONYMOUS_FILTER" ref="anonymousFilter"/>
<custom-filter before="FORM_LOGIN_FILTER" ref="customFilter"/>
<custom-filter before="LOGOUT_FILTER" ref="logoutFilter" />
</http>
我尝试了以下几种选择
选项1-创建了一个HttpFilter来刷新cookie并同步会话和cookie之间的时间
选项2-为登录页面url(/login)创建了一个HttpFilter,为登录页面调用Filter并删除cookie
选项1似乎不起作用,因为我可以在会话超时后看到cookie。选项2的问题是,如果登录的用户尝试从同一浏览器中使用不同的选项卡再次请求登录页面,则会调用筛选器并删除cookie。这很糟糕。因为cookie是进一步通信所必需的
你能帮我删除cookie的正确方法吗
我还想提到在HttPSessionListene#sessionDestroyed方法之前调用过滤器 您必须在会话超时时删除cookies。
我们在项目中做了以下工作:
<session-management session-authentication-strategy-ref="maxSessions"
invalid-session-url="/home/sessionExpired"/>
希望它能帮助你你的饼干是做什么用的?由于您使用的是spring安全性,我认为它不用于会话标识,因为它由spring sec管理。如果您有一个会话,为什么要尝试将另一个cookie与您的会话同步?您将在中找到有关cookie类型的参考,我们正在其他子系统中执行基于cookie的身份验证OK,但是您确定您真的需要在这两个系统上保持会话同步吗?我不确定您是否可以,但您也可以考虑将其作为在中心点对用户进行身份验证的一种实现,以利于多个系统。请注意,此协议使用会话cookie,而不是永久cookie(请参阅我之前的评论以获取参考)。没错。但此时此刻,我无法改变任何事情。如果你能用剩下的选项提供一些方向,你应该提供更多关于你想做什么和你能做什么的信息。如果没有更多信息,我只能问您是否在会话中保留cookie的值。它可以帮助查看cookie是否有效(不在当前会话中意味着无效…)在何处添加此
handleSessionTimeout
方法?您需要在控制器中添加此方法。
@RequestMapping(value="/home/sessionExpired")
public String handleSessionTimeout(HttpServletRequest request, RedirectAttributes
redirectAttributes) {
SecurityContextHolder.clearContext();
HttpSession = request.getSession(false);
if(session != null) {
session.invalidate();
}
for(Cookie cookie : request.getCookies()) {
cookie.setMaxAge(0);
}
//err.sessionexpired : make entry in properties file
redirectAttributes.addFlashAttribute("message", "err.sessionexpired");
return "redirect:/auth/login";
}