【问题标题】:is there a way to find out if the http request is coming from a expired web page有没有办法找出http请求是否来自过期的网页
【发布时间】:2014-10-12 04:51:30
【问题描述】:

有没有办法查明http请求是否来自过期的网页(IE页面表示网页已过期)。单击后退按钮,我将过期网页。 现在在过期页面上,我执行刷新/或 F5,我想将用户带到带有错误消息的特定页面上。这个特定页面是我的主页,请求映射是 /homecontroller。 我正在尝试使用过滤器来实现这一点,但我无法知道请求是来自过期页面还是登录页面。有人可以帮忙吗。

示例 - 假设有 3 个页面 A(/controllerA) -> B(/controllerB) -> C(/controllerC)。

  1. 现在当我从页面 A 转到页面 B 时,我通过设置 setCacheSeconds(0)、setUseExpiresHeader(true)、setUseCacheControlHeader(true)、setUseCacheControlNoStore(true) 清除了缓存。
  2. 现在我要从 B 页转到 C 页。
  3. 现在我在页面 C 时单击浏览器后退按钮,以便返回页面 B
  4. 现在我得到的不是页面 B,而是 IE 的“网页已过期”消息页面
  5. 在上述过期页面上,我刷新或 F5。调用转到 url (/controllerB)
  6. 现在在 (/controllerB) 的控制器中,我想检查此调用是否来自过期页面,然后将此调用转发到 /controllerA,以便可以显示主页 A。如果此调用不是来自过期页面,我想从 /ControllerB 显示页面 B

【问题讨论】:

  • 过期页面是什么意思?
  • 您是否使用 cookie 来跟踪到期时间?
  • 尝试在会话中使用属性。
  • 过期页面是指带有“网页已过期”消息的页面。当您在加载页面时清除缓存时会出现。

标签: java servlets request servlet-filters servlet-listeners


【解决方案1】:

一般来说,您需要从页面 B 传递到页面 C 的某种 token(参数)来验证请求未过期。
这将是建议的流程:
- 在从 A 到 B 的转换中,您在会话属性中设置,例如 'expectedToken' = n
- 页面 B 在转换到 C 时也发送此令牌(例如,通过 GET 中的请求参数,或隐藏在 POST 中)
- 控制器 C,您检查请求中的 expectedToken 是否与会话中的相同,并在会话中增加 expectedToken。如果请求中的令牌与会话中的令牌相同,则您的转换有效,如果令牌不匹配,则从过期页面重新发送(因为浏览器将使用旧令牌值,并且您已经在会话中增加了一个)。

【讨论】:

    【解决方案2】:

    当用户登录在会话属性中设置该用户名或 ID 时,您可以使用会话来实现此目的

    session.setAttribute("userid",  "21");
    

    并在 web.xml 中保持会话超时

    <session-config>
        <session-timeout>20</session-timeout>
    </session-config>
    

    当用户尝试访问过滤器中的页面时,尝试验证会话是否处于活动状态,这可以使用以下代码完成

    session.getAttribute("userid");
    

    如果上面的代码返回 null 而不是将用户重定向到登录页面,则允许访问您的课程。如果 session 返回 null 表示 session 已经过期。

    使会话无效

    session.invalidate();
    

    希望这会对你有所帮助。

    【讨论】:

    • 我不想使会话无效。以银行网站为例,您单击后退按钮,您会收到网页已过期的消息。现在您在 IE 中单击刷新,您将收到重试/取消消息。单击重试时,我想将用户重定向到他的个人主页或任何其他页面。
    • @deepak 在银行中,我看到理想情况下,如果我们按下后退按钮,他们会注销我们。但是如果你想让他们进入主页,那么你必须在 f5 上捕获事件或在 javascript 中重试并相应地将其转发到主页。检查这个link
    猜你喜欢
    • 2011-12-14
    • 2023-02-09
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多