我在设计GWT应用程序时遇到了一些麻烦。我正在尝试开发RIA app(只有一个主要的小部件,我们称之为Main)。首先,必须记录用户。这是我的方法,但它确实有问题,你会看到。
一切正常,但当您按刷新时,它会再次显示登录组件......这一切都发生在onModuleLoad
方法中。
我该如何重新设计这个逻辑?我想让用户登录(这意味着RootPanel将保留主窗口小部件)一段时间。
答案 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来解决。