我有一个使用Spring安全性和Spring社交集成的Web应用程序。我在应用程序的菜单上放置了登录按钮(表单帖子),可以从任何路径/网页访问。我可以通过在我的网页上发布/ signin / {provider}来登录,该网页重定向到google的登录页面进行身份验证,成功验证后重定向回“已配置的网址”。我希望此网址是动态的,以便用户重定向回用户点击使用Google登录按钮的原始网址。
我拥有的选项:
使用SignInAdapter返回要重定向到的网址。我们在signIn()方法中获取本机Web请求对象,但是我无法找到一种方法来发送一些参数,比如回调网址,在初始登录表单发布期间可能在signIn()方法中可用。
在FormPost上,不要在同一个窗口中重定向,而是打开iframe / popup来处理post响应(实际上是提供者url,如http://accounts.google.com/.....。)。成功验证后重新加载父页面。但这里的iframe不允许跨域网址。对于弹出窗口,我不知道如何在弹出窗口中提供表单发布回复。
这是一个电子商务应用程序,因此希望在安全性和用户限制方面(例如阻止的popus)争取一些最佳实践。
答案 0 :(得分:2)
最后让它使用问题中提到的第二种方法。而不是直接点击“使用Google登录”按钮登录(登录/ {providerId}),打开一个弹出窗口(子窗口),其中包含:
<button type="submit" onClick=
"window.open('/signin?formId=googleForm','Ratting','width=550,height=400,left=150,top=200,toolbar=0,status=0,');" class="googlelogin" style="border-width: 0px;">
</button>
并在此弹出窗口中,通过javascript,在onload期间执行自动表单发布。
配置重定向网址,该网址会在成功登录后加载到具有重新加载父窗口的javascript代码的网页。类似的东西:
(function(){
if (opener) {
opener.postMessage("reload", '*');
window.close();
}
else {
window.location.assign('/');
}
}());
父窗口应该有子窗口发布的消息的监听器。类似的东西:
function listener(event){
if (event.data === "reload")
document.location.reload();
}
if (window.addEventListener){
addEventListener("message", listener, false)
} else {
attachEvent("onmessage", listener)
}
希望它可以帮助那些寻找解决方案的人这样一个非常简单的用例。