有没有办法找出http请求是否来自过期的网页(IE页面表示网页已过期)。我点击后退按钮即将到期网页。 现在在过期的页面上,我刷新/或F5,我想带一个特定页面上的用户,并显示错误消息。这个特定页面是我的主页,请求映射是/ homecontroller。 我试图使用过滤器来实现这一点,但我没有办法知道请求是来自过期页面还是登录页面。有人可以帮忙。
示例 - 假设有3页A(/ controllerA) - > B(/ controllerB) - > C(/ controllerC)。
答案 0 :(得分:0)
当用户登录在会话属性
中设置该用户名或ID时,您可以使用会话来实现此目的session.setAttribute("userid", "21");
并在web.xml中保持会话超时
<session-config>
<session-timeout>20</session-timeout>
</session-config>
当用户尝试访问过滤器中的页面时,尝试验证会话是否处于活动状态,这可以使用以下代码完成
session.getAttribute("userid");
如果上面的代码返回null而不是将用户重定向到登录页面,则允许访问您的类。如果session返回null,则表示会话已过期。
使会话无效
session.invalidate();
希望这会对你有所帮助。
答案 1 :(得分:0)
通常,您需要从页面B传递到页面C的某种token
(参数)来验证请求是否已过期。
这将是建议流程:
- 在从A转换为B时,您可以设置会话属性,例如&#39; expectedToken&#39; = n
- 转换到C时的页面B,也发送此令牌(例如,通过GET中的请求参数,或者在POST中隐藏)
- 控制器C,检查请求中的expectedToken
是否与会话中的expectedToken
相同,并在会话中增加{{1}}。如果请求中的令牌与会话中的令牌相同,则转换有效,如果令牌不匹配则从过期页面重新发送(因为浏览器将使用旧令牌值,并且您将在会话中增加一个)