2

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

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

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

有没有其他人做过这样的事情?

最好的,迈特里

4

2 回答 2

1

我的建议是结合 HTML5 History API (pushStateonpopstate) 以保持该位置沿重定向,使用此技术将其与 集成PlaceHistoryHandler,并将您的容器安全性重定向到登录屏幕(我只是security-constraint在我web.xml

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

如果您需要支持不支持 HTML5 History API 的浏览器,那么您可以在应用程序中使用为您提供永久链接的按钮作为后备。然后,您必须从该永久链接重定向到使用哈希部分对位置进行编码的位置,即可以由DefaultHistorian.
这是新的 Google Groups(在 GWT 中制作)正在使用的方法。

于 2012-05-08T16:07:31.387 回答
0

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

www.example.org/index.html#sometoken

这样的链接将收件人带到您的 GWT 应用程序,然后由该应用程序决定做什么。我认为,提供完整的 GWT 应用程序通常不是问题,即使用户根本没有被授权(GWT 可以编译为混淆的 JavaScript)[*]。应用程序本身通常不包含秘密数据——这些数据是通过 AJAX 加载的。

通过 AJAX 调用,服务器可以检测到用户未登录 - 并返回适当的异常。客户端收到 Exception 后,可以转发到登录页面(Window.Location.replace(...)),只需将 token 重新编码为 GET 参数即可

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

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

[*] 如果你必须保护甚至混淆的代码不被窥探,你可以将“index.html”映射到一个 Servlet,它发送一些简短的 JavaScript 应用程序(其唯一的工作是转发到登录页面),而不是完整的GWT 应用程序,如果用户未登录。

替代解决方案

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

于 2012-05-08T23:11:23.100 回答