【问题标题】:GWT Application in Tomcat with endless sessionsTomcat 中具有无限会话的 GWT 应用程序
【发布时间】:2012-03-12 00:28:50
【问题描述】:

我有一个在 Tomcat 6 中运行的 GWT 应用程序。问题场景如下:

  • 人们正在使用该应用程序,例如用户 B 点击该应用程序。
  • 现在我重新启动应用程序
  • 如果我没有打开 GWT 应用程序的起始页,那么一旦用户 B 继续在应用程序中工作,整个 Web 应用程序就会崩溃。

现在,如果我可以设置会话超时就足够了,这意味着用户在 30 分钟后被重定向到起始页面(如果他没有在应用程序中执行任何操作)。出于维护原因,目前仅在 0300 进行重启。

因此我想知道,是否可以在 Tomcat 中为 GWT 应用程序设置会话超时?在 web.xml 中,超时设置为 30 分钟,但我认为它不适用于 GWT 应用程序。

【问题讨论】:

    标签: session gwt tomcat


    【解决方案1】:

    应用程序的 GWT 部分只是客户端,它不控制会话。为了获得您想要的行为(在 30 分钟不活动后超时)创建一个 servlet 过滤器,在每个请求上查看会话中的最后一个请求时间,如果它已过期则创建一个新的未经身份验证的会话,如果未过期则更新下次超时(或时间+30 分钟)的会话。然后在您的 servlet 代码中检查经过身份验证的会话,如果它无效,则重定向到登录页面。

    【讨论】:

    • 有很多 servlet。我通常让 1 个 servlet 处理许多映射,然后决定在 servlet 内部做什么。使用请求工厂使所有数据调用都通过该 servlet,然后一个 servlet 用于 rest api 调用,一个 servlet 用于身份验证。
    • 过滤器也应该能够引起重定向,在这种情况下,跳过转发到过滤器链中的下一个东西。这当然只有在每个 servlet 都需要此身份验证时才有意义。另一种方法是,因为您使用的是 servlet,所以它们都从某个 AuthenticatedServlet 扩展而来,它会提前进行检查。
    猜你喜欢
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 1970-01-01
    • 2011-12-21
    相关资源
    最近更新 更多