我正在使用GWT History支持改造我的应用程序,我偶然发现了一个我不太确定该怎么做的情况。这个问题的答案不一定与GWT有关。
GWT的历史支持函数通过传递哈希标记(即index.html#token
)。安全限制要求用户在实际访问index.html
之前登录,以便将其发送到登录页面,保留令牌(login.html#token
)。到现在为止还挺好。现在,用户将进行身份验证,并将Spring发送到index.html
(默认目标)并删除URL的#token
部分。
如何强制Spring Security维护令牌并将新认证的用户发送到他们请求的页面(index.html#token
)?由于我已经使用了Spring Security身份验证,因此我不希望重新构建我的应用程序处理登录的方式。
答案 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)
发生了什么,它可能会帮助您解决问题:
一种解决方案是将令牌注入index.html,并使用GWT进行提取。另一个是制作login.html - > index.html 3xx重定向(如果spring允许)。