GWT客户端的会话管理

时间:2015-08-26 06:54:36

标签: java gwt

我正在构建一个GWT应用程序,其中我有3个RootPanel,其中一个包含登录面板(userId和Password)。我的应用程序是一个单页应用程序。为了登录,用户的id和密码通过RPC从服务器变化,如果组合正确,则下一个Panel加载哪个是我的主应用程序。由于它是一个单页面应用程序,我想知道如何在此应用程序中执行会话管理。

3 个答案:

答案 0 :(得分:0)

我在不同的GWT应用程序中使用的方法很少

  • 检查每个RPC(客户端/服务器)上的用户凭据。遵循通用 编程(每个RPC中明显的时间延迟: - /
  • Using Thread Local首选方式

getThreadLocalRequest().getSession().setAttribute("user", user); //and get

  • 使用Cookie允许用户的网络浏览器记住'登录。
  • 我没有使用过的其他人很少。例如:本地存储(not secured, dependent

答案 1 :(得分:0)

您可以在应用程序web.xml中配置会话,并且可以编写会话过滤器,该过滤器将过滤对服务器的所有或特定请求,您可以在其中验证会话是否过期或有效。如果它已过期,您可以将用户重定向到您想要的任何页面。

答案 2 :(得分:0)

AJAX应用程序的一大优势是无需在服务器端进行会话即可工作。据我所知,Ray Ryan在Google I / O演示文稿中提到了无状态服务"构建GWT应用程序的最佳实践"在Google I / O 2009上。

在服务器端进行会话会产生一些影响:

  • 会话可以过期
  • 需要大量资源
  • 它使负载平衡变得更加复杂

即使您在服务器端进行了会话管理,也必须在每次服务器调用时检查用户凭据!您永远无法确定,您的应用程序始终是您的服务!

因此,我个人避免在我的GWT应用程序中使用服务器端的会话管理。

相反,你可以这样做:

在登录后,将一些信息(如userid,登录时间,IP地址等)存储在数据库表中。使用记录的密钥,对其进行加密并将此令牌发送回客户端。服务器端的所有服务都应该使用userId和token作为输入参数。在开始执行业务逻辑之前,应检查用户凭据。解密令牌并从数据库表中读取记录。

  • 未找到任何记录 - >用户未登录
  • 不是有效的数据库密钥 - >用户未登录
  • 将存储的userId与您从服务器调用获得的用户ID进行比较 - >不相等 - >用户未登录
  • 将存储的IP地址与服务器调用中的地址进行比较 - >不等于 - >用户未登录

等等。

此外,您应始终使用SSL!