GWT登录位置

GWT登录位置,gwt,Gwt,我们需要使用GWT places在我们创建的应用程序中通过电子邮件发送指向记录的链接。我们的应用程序需要登录凭据,因此有两种情况需要处理 1) 您收到一个指向某个记录的链接,并且您已经登录到应用程序,在这种情况下,单击该链接将直接指向该记录 2) 您收到一个指向记录的链接,但尚未登录到应用程序,在这种情况下,单击该链接应首先进入登录屏幕,然后在登录后直接进入该记录 还有其他人做过这样的事吗 最好的, maitri我的建议是结合HTML5历史API(pushState和onpopstate)来保持

我们需要使用GWT places在我们创建的应用程序中通过电子邮件发送指向记录的链接。我们的应用程序需要登录凭据,因此有两种情况需要处理

1) 您收到一个指向某个记录的链接,并且您已经登录到应用程序,在这种情况下,单击该链接将直接指向该记录

2) 您收到一个指向记录的链接,但尚未登录到应用程序,在这种情况下,单击该链接应首先进入登录屏幕,然后在登录后直接进入该记录

还有其他人做过这样的事吗

最好的,
maitri

我的建议是结合HTML5历史API(
pushState
onpopstate
)来保持位置沿着重定向,使用将其与
PlaceHistoryHandler
集成,并将容器安全性重定向到登录屏幕(我只是在我的
web.xml
中使用
安全约束

这样,当您在应用程序中导航时,您可以永久链接到不使用URL哈希部分的位置(该部分不会发送到服务器,因此在服务器重定向到登录页面时会丢失)。
当您有这样一个永久链接且未登录时,servlet容器会将您重定向到登录页面,然后在登录后返回URL。由于该URL没有使用哈希部分对位置进行编码,因此该URL已发送到服务器,因此在重定向之间不会丢失

如果您需要支持不支持HTML5历史API的浏览器,那么您可以在应用程序中使用一个按钮作为回退,该按钮为您提供永久链接。然后,您必须从该永久链接重定向到一个使用哈希部分对位置进行编码的浏览器,即可以由
DefaultHistorian
处理的浏览器

这就是新的谷歌群组(GWT制作)正在使用的方法。

我假设您希望允许用户从浏览器的地址栏复制URL,并通过电子邮件发送。链接可能类似于

www.example.org/index.html#sometoken

这样的链接会将接收者带到你的GWT应用程序,然后由它来决定该做什么。我认为,只为完整的GWT应用程序提供服务通常不是问题,即使用户根本没有授权(GWT可以编译成模糊的JavaScript)[*]。应用程序本身通常不包含机密数据——这些数据是通过AJAX加载的

通过AJAX调用,服务器可以检测到用户未登录,并返回相应的异常。当接收到异常时,客户端可以转发到登录页面(
Window.Location.replace(…)
),只需将令牌重新编码为GET参数

www.example.org/login.html?historytoken=sometoken

成功登录后,服务器再次重定向到“/index.html#sometoken”(
resp.sendRedirect(…)
)。它可以轻松构建URL片段,因为它可以读取get参数“historytoken”

[*]如果你必须保护模糊的代码不被窥探,你可以将“index.html”映射到一个Servlet,如果用户没有登录,它会发送一些短的JavaScript应用程序(其唯一任务是转发到登录页面),而不是完整的GWT应用程序

替代解决方案
另一个解决方案(只要你的整个应用程序都是通过HTTPS提供服务的),可能是将登录作为对话框集成到应用程序中,而不进行任何重定向。但这种方法并不总是可行的(也不总是很好)。

你确定这是新的谷歌群组(GWT)方法吗?对我来说,它似乎只使用了“继续=”GET参数构造一个类似URL的URL,然后通过登录屏幕上的POST请求继续。我说的是(单击“链接到此主题”按钮)与(实际URL,您在浏览器地址栏中看到的内容).Google Groups有点特殊,因为它具有匿名访问权限,因此重定向可以用JavaScript完成,并保留URL中的哈希部分。我认为在访问私人组(或使用Google应用程序)时,它的工作方式略有不同好的,我明白你的意思,很好。这些链接可以避免客户端重定向-直接服务器端重定向到登录页面更快。但是,仍然需要一种机制来处理“#…”链接(从地址栏复制):对于支持它的浏览器(),HTML 5历史记录方法是理想的。对于其他浏览器,它使用GET参数。“但是,仍然需要处理“#…”链接(从地址栏复制)的机制”:如果您使用HTML5历史API,则不会。IE用户将在重定向后失去哈希部分,从而导致体验降级;他们只需再次复制/粘贴URL即可到达所需位置。这取决于项目的要求,我会说,但是的,这绝对是一个有效的论点!