使用Wicket处理会话超时

使用Wicket处理会话超时,wicket,Wicket,我正在做一个wicket遗留项目,我正试图修复一个会话超时的bug。 基本上,我希望在会话超时后重定向到自定义错误页面。 这就是我所做的: web.xml: 1. 在应用程序类中: @凌驾 公共无效初始{ super.init; getApplicationSettings.setPageExpiredErrorPageErrorMessagePage.class; 这不起作用。我的意思是在课时结束后,什么也没发生。 我做错了什么 编辑04.05.20 根据Martin的反馈,我尝试实现一个会话

我正在做一个wicket遗留项目,我正试图修复一个会话超时的bug。 基本上,我希望在会话超时后重定向到自定义错误页面。 这就是我所做的:

web.xml:

1. 在应用程序类中:

@凌驾 公共无效初始{ super.init; getApplicationSettings.setPageExpiredErrorPageErrorMessagePage.class; 这不起作用。我的意思是在课时结束后,什么也没发生。 我做错了什么

编辑04.05.20

根据Martin的反馈,我尝试实现一个会话验证检查器:

公共类SessionValidityChecker实现IRequestCycleListener{ @凌驾 开始时的公共无效请求请求周期周期{ HttpServletRequest=HttpServletRequest cycle.getRequest.getContainerRequest; 布尔sessionValid=request.isRequestedSessionIdValid; 如果!sessionValid{ cycle.setResponsePagesionExpiredPage.class; } } } 在应用程序中

公共无效初始{ super.init; getRequestCycleListeners.addnew SessionValidityChecker; } 在我的第一篇文章中,我可能还应该指定使用wicket SignInPanel进行身份验证。超时后,我希望用户注销并重定向到特定页面


这是我用上面的代码尝试过的,但在会话超时后,不会发生重定向。即使最糟糕的情况是,用户仍在登录。我遗漏了什么?

您将页面过期与会话过期弄错了。 有状态页面存储在PageStore磁盘中,存储可能会增长到某个预定义的大小。一旦达到此大小,将删除最旧的页面,为最新的页面腾出空间。 如果用户在某个时间多次使用浏览器后退按钮,Wicket将对删除的页面抛出PageExpiredException

在您的情况下,当会话过期时,通常web服务器(例如Tomcat)会创建一个新的服务器。如果您的应用程序启用了身份验证,则它会检测到新http会话中没有经过身份验证的用户,并且很可能会将用户重定向到登录页面

如果没有身份验证,Wicket将创建请求页面的新实例并呈现它。您可以通过将PageSettingsCreateBookmarkablePageSafetExpiry更改为false来更改此设置 看


您可以使用javax/servlet/http/HttpServletRequest.htmlisrequestedsessiondvalid方法来查找请求是否带有过期的JSSessionID cookie/url。如果为false,则web服务器刚刚创建了一个新的HttpSession。您可以在Wicket的IRequestCycleListeneronBeginRequest中执行签入操作。

您将页面过期误认为是se过期。 有状态页面存储在PageStore磁盘中,存储可能会增长到某个预定义的大小。一旦达到此大小,将删除最旧的页面,为最新的页面腾出空间。 如果用户在某个时间多次使用浏览器后退按钮,Wicket将对删除的页面抛出PageExpiredException

在您的情况下,当会话过期时,通常web服务器(例如Tomcat)会创建一个新的服务器。如果您的应用程序启用了身份验证,则它会检测到新http会话中没有经过身份验证的用户,并且很可能会将用户重定向到登录页面

如果没有身份验证,Wicket将创建请求页面的新实例并呈现它。您可以通过将PageSettingsCreateBookmarkablePageSafetExpiry更改为false来更改此设置 看


您可以使用javax/servlet/http/HttpServletRequest.htmlisrequestedsessiondvalid方法来查找请求是否带有过期的JSSessionID cookie/url。如果为false,则web服务器刚刚创建了一个新的HttpSession。您可以在Wicket的IRequestCycleListeneronBeginRequest中进行检查。谢谢您的回答。但是,如果n超时,我希望用户不被重定向到登录页面,而是被重定向到一个自定义过期页面。我应该使用哪种方法?如何对此进行控制?您可以使用javax/servlet/http/HttpServletRequest.htmlisrequestedsessiondvalid方法来查找请求是否带有过期的JSSessionID cookie/url。如果为false,则web服务器刚刚创建了一个新的HttpSession。你可以签入Wicket的IRequestCycleListeneronBeginRequestHi Martin,你能顺便看看我的编辑吗?谢谢你的回答。但是,如果在会话超时后,我希望用户不被重定向到登录页面,而是被重定向到自定义过期页面。我应该使用哪种方法?如何要对此进行控制?您可以使用javax/servlet/http/HttpServletRequest.htmlisrequestedsessiondvalid方法来查找请求是否带有过期的JSSessionID cookie/url。如果为false,则web服务器刚刚创建了一个新的HttpSession。您可以在Wicket的IRequestCycleListe中执行签入操作
neronBeginRequestHi Martin,你能顺便看看我的编辑吗?