我们需要使用GWT位置来启用通过电子邮件发送我们创建的应用程序中的记录的链接。我们的应用程序需要登录凭据,因此我们需要处理两种情况。
1)您收到一条记录链接,并且您已登录该应用程序,在这种情况下,点击该链接会直接带您进入记录
2)您收到一条指向记录的链接,而您未已登录到该应用程序,在这种情况下,点击该链接会将您带到登录屏幕1,然后登录后需要你直接到记录
还有其他人做过这样的事吗?
最佳, maitri
答案 0 :(得分:1)
我的建议是将HTML5历史记录API(pushState
和onpopstate
)结合使用以保持重定向的位置,使用this technique将其与PlaceHistoryHandler
集成,和您的容器安全性重定向到登录屏幕(我只是在我的security-constraint
中使用web.xml
。)
这样,当您在应用中导航时,您有一个永久链接到不使用URL的哈希部分的地方(不会发送到服务器,因此当服务器重定向到登录页面时会丢失。) 如果您有这样的永久链接并且未登录,则servlet容器会将您重定向到登录页面,然后在登录后返回到URL。并且因为该URL未使用 hash 部分用于对该地点进行编码,该地点已被发送到服务器,因此在重定向之间不会丢失。
如果您需要支持不支持HTML5历史记录API的浏览器,那么您可以使用应用程序中的一个按钮作为后备,为您提供永久链接。然后,您必须从永久链接重定向到使用哈希部分对该地点进行编码的地方,即可以由{{1}处理的地方}。
这是新Google网上论坛(GWT制作)使用的方法。
答案 1 :(得分:0)
我假设您希望允许用户从浏览器的地址栏复制URL,并通过电子邮件发送。链接可能看起来像
www.example.org/index.html#sometoken
此类链接将收件人带到您的GWT应用程序,然后该应用程序决定要执行的操作。我认为,即使用户根本没有授权(GWT可以编译为混淆的JavaScript),通常通常也不仅仅是服务整个GWT应用程序的问题 [*] 。应用程序本身通常不包含秘密数据 - 数据通过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提供),可能是将登录作为对话框集成到应用程序中而不进行任何重定向。但这种方法并不总是可行的(并不总是好的)。