通过Spring Security登录保持GWT历史哈希

时间:2012-01-21 22:05:58

标签: gwt spring-security url-parameters

我正在使用GWT History支持改造我的应用程序,我偶然发现了一个我不太确定该怎么做的情况。这个问题的答案不一定与GWT有关。

GWT的历史支持函数通过传递哈希标记(即index.html#token)。安全限制要求用户在实际访问index.html之前登录,以便将其发送到登录页面,保留令牌(login.html#token)。到现在为止还挺好。现在,用户将进行身份验证,并将Spring发送到index.html(默认目标)并删除URL的#token部分。

如何强制Spring Security维护令牌并将新认证的用户发送到他们请求的页面(index.html#token)?由于我已经使用了Spring Security身份验证,因此我不希望重新构建我的应用程序处理登录的方式。

3 个答案:

答案 0 :(得分:4)

经过大量的挖掘,我在Spring's Jira找到了答案。正如Colin Alworth所说,该令牌实际上并不是请求的一部分,因此Spring Security永远不会在服务器端看到它,因此无法使用它来确定最终的URL。所以我使用的方法是将哈希(客户端)附加到j_spring_security_check,使其成为j_spring_security_check#token。现在令牌传递得很好,让我有一个安全可靠的应用程序与工作令牌。

感谢你对科林的帮助,你的回答让我思考正确的方向。

答案 1 :(得分:3)

如您所知,服务器无法将此令牌视为GET / POST请求的一部分,只有浏览器才能看到它。我在过去看到的最佳解决方案是登录页面记录当前的window.location.hash,并将其与登录表单一起传递(假设将发生重定向,以保持哈希),或作为登录参数的服务器,以便它可以正确地重定向。

答案 2 :(得分:0)

发生了什么,它可能会帮助您解决问题:

  1. 将未经身份验证的用户从index.html发送到login.html 可能实现为HTTP 3xx重定向,这就是为什么 浏览器保留哈希片段(#token)。
  2. 一旦登录,spring就会将它们从login.html发送到index.html而不是 通过3xx重定向,以便浏览器不保留令牌。
  3. 一种解决方案是将令牌注入index.html,并使用GWT进行提取。另一个是制作login.html - > index.html 3xx重定向(如果spring允许)。