GWT:应用程序架构的问题

时间:2011-01-27 21:09:49

标签: java gwt architecture

我在设计GWT应用程序时遇到了一些麻烦。我正在尝试开发RIA app(只有一个主要的小部件,我们称之为Main)。首先,必须记录用户。这是我的方法,但它确实有问题,你会看到。

  1. 在根面板上显示登录组件
  2. 如果登录成功(检查数据库),则显示主窗口小部件
  3. 小部件已添加到根面板
  4. 一切正常,但当您按刷新时,它会再次显示登录组件......这一切都发生在onModuleLoad方法中。

    我该如何重新设计这个逻辑?我想让用户登录(这意味着RootPanel将保留主窗口小部件)一段时间。

2 个答案:

答案 0 :(得分:3)

http://code.google.com/p/google-web-toolkit-incubator/wiki/LoginSecurityFAQ

  

如何记住登录

     

我们的登录信息   系统到目前为止错过了一个有用的功能:   目前它需要用户登录   每一次都会。

     

我们可以使用Cookie来允许用户使用   网络浏览器“记住”登录。   在GWT中,设置cookie(你可以   在GWT代码收到后立即行动   我们之前做的回应   代码片段):

String sessionID = /*(Get sessionID from server's response to your login request.)*/;
final long DURATION = 1000 * 60 * 60 * 24 * 14; //duration remembering login. 2 weeks in this example.
Date expires = new Date(System.currentTimeMillis() + DURATION);
Cookies.setCookie("sid", sessionID, expires, null, "/", false);
     

现在您可以运行以下代码   就在你的!EntryPoint开始之后   执行:

String sessionID = Cookies.getCookie("sid");
if ( sessionID != null ) checkWithServerIfSessionIdIsStillLegal();
else displayLoginBox();
     

记住 - 你绝不能依赖sessionID   通过cookie发送到您的服务器   标题只查看sessionID   您的GWT应用程序明确发送   邮件的有效载荷到你的   服务器

我不确定您的GWT应用程序如何实现与登录服务的通信,但如果您想查看另一个示例,我在此处按照示例进行操作:

http://code.google.com/webtoolkit/doc/latest/tutorial/appengine.html#user

虽然它使用Google App Engine作为后端身份验证服务,但我认为它足够通用,可以适应任何支持GWT RPC服务器端并具有身份验证服务的服务器。

答案 1 :(得分:1)

您需要某种服务器端支持才能执行此操作。

例如,当用户登录时,在服务器端会话中将其标记。在onModuleLoad()中,调用服务器以在显示登录表单之前检查用户是否已登录。

与按下Refresh相关的其他问题可以通过history tokens来解决。