【问题标题】:How to redirect to a page after session timeout?会话超时后如何重定向到页面?
【发布时间】:2015-02-19 13:04:33
【问题描述】:

我有两个领域的 Java Web 应用程序:公共和私有。我已经为这两个区域配置了会话超时。会话超时后,我需要重定向到另一个页面。

如果会话超时来自公共区域,我需要重定向到主页,如果会话超时来自私人区域,我需要重定向到另一个页面,并显示消息“您的会话已超时!” 我该怎么做?

【问题讨论】:

标签: java session session-timeout


【解决方案1】:

我不知道你使用什么库或框架,但总的来说,你可以使用观察者模式在 Java 中模拟事件:http://en.wikipedia.org/wiki/Observer_pattern

您的“重定向”逻辑将是观察者,您在会话逻辑中注册它,并在会话发生某些事情时通知它。

【讨论】:

    【解决方案2】:

    我建议您为此创建 HTTP 过滤器。此过滤器映射到您网站的私有区域并执行以下操作:

    1. 检查会话是否过期HttpServletRequest.getSession(false)
    2. 如果过期将用户重定向到登录页面。

    【讨论】:

    • 我已经有一个公共和私人区域通用的过滤器。目前在该过滤器中,我在会话超时时重定向到单个页面。如何区分公共区域和私有区域,然后重定向到各自的页面?
    • 我建议您使用不同的 URL 来执行此操作。例如将所有公共资源放在public 目录下,将所有私有资源放在private 目录下。然后仅使用web.xml 中的filter-mapping 标记将您的过滤器映射到私有目录。
    • 你可以继续你的过滤器......使用request#getRequestURI()来测试URI是否匹配公共或私人页面的URI并进行适当的重定向......
    • @LucasOliveira,程序化过滤也不错,但恕我直言,声明式解决方案更加模块化,并允许更好的代码重用。
    • @AlexR 在我的情况下,我不打算更改 URL,因为它已经在谷歌跟踪之下。有没有其他方法可以做到这一点?
    【解决方案3】:

    如果您在 DD 中配置了 HttpSessionListener 侦听器,则会调用HttpSessionListener#sessionDestroyed()

    你可以做基于这个方法的调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-12
      • 2012-05-04
      • 1970-01-01
      • 2018-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多