Spring 社交 - 如何重定向到原始 URL 或通过 Popup/Iframe 重新加载进行身份验证
Spring Social - How to Redirect to original URL or authenticate via Popup/Iframe with reload
我有一个 Web 应用程序,它使用 spring 安全和 spring 社会整合。我在应用程序的菜单上放置了登录按钮(表单 post),可以从 paths/webpages 中的任何一个访问该按钮。我可以通过 posting on /signin/{provider} 从我的网页上登录,该网页重定向到 google 的登录页面进行身份验证,并在成功身份验证后重定向回 "configured URL"。我希望此 URL 是动态的,以便用户被重定向回原始 URL,用户在其中单击 使用 Google 按钮登录。
我有的选项:
使用SignInAdapter将return重定向到URL。我们在 signIn() 方法中获取本机 Web 请求对象,但我无法找到一种方法来发送一些参数,比如回调 url,在初始登录表单 post 期间可能在 signIn 中可用()方法.
在 FormPost 上,不是在同一个 window 中重定向,而是打开一个 iframe/popup 来处理 post 响应(实际上是提供者 url 喜欢 http://accounts.google.com/......)。并在成功验证后重新加载父页面。但是这里iframe不允许跨域urls。对于弹出窗口,我不知道如何在弹出窗口中添加表单 post 响应。
这是一个电子商务应用程序,因此希望在安全性和用户限制(如阻止的 popus)方面争取一些最佳实践。
终于可以使用问题中提到的第二种方法了。不要直接点击 "Login with Google" 按钮登录表单 post (signin/{providerId}),而是打开一个弹出窗口 window (child window),内容如下:
<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>
并在此弹出 window 上,通过 javascript,在加载期间执行自动表单 post。
配置重定向 url,它会在成功登录后加载到具有 javascript 代码的页面,该代码会重新加载您的父级 window。类似于:
(function(){
if (opener) {
opener.postMessage("reload", '*');
window.close();
}
else {
window.location.assign('/');
}
}());
父 window 应该有一个监听器 post 由子 window 编辑的消息。类似于:
function listener(event){
if (event.data === "reload")
document.location.reload();
}
if (window.addEventListener){
addEventListener("message", listener, false)
} else {
attachEvent("onmessage", listener)
}
希望它能帮助寻找像这样非常微不足道的用例的解决方案的人。
我有一个 Web 应用程序,它使用 spring 安全和 spring 社会整合。我在应用程序的菜单上放置了登录按钮(表单 post),可以从 paths/webpages 中的任何一个访问该按钮。我可以通过 posting on /signin/{provider} 从我的网页上登录,该网页重定向到 google 的登录页面进行身份验证,并在成功身份验证后重定向回 "configured URL"。我希望此 URL 是动态的,以便用户被重定向回原始 URL,用户在其中单击 使用 Google 按钮登录。
我有的选项:
使用SignInAdapter将return重定向到URL。我们在 signIn() 方法中获取本机 Web 请求对象,但我无法找到一种方法来发送一些参数,比如回调 url,在初始登录表单 post 期间可能在 signIn 中可用()方法.
在 FormPost 上,不是在同一个 window 中重定向,而是打开一个 iframe/popup 来处理 post 响应(实际上是提供者 url 喜欢 http://accounts.google.com/......)。并在成功验证后重新加载父页面。但是这里iframe不允许跨域urls。对于弹出窗口,我不知道如何在弹出窗口中添加表单 post 响应。
这是一个电子商务应用程序,因此希望在安全性和用户限制(如阻止的 popus)方面争取一些最佳实践。
终于可以使用问题中提到的第二种方法了。不要直接点击 "Login with Google" 按钮登录表单 post (signin/{providerId}),而是打开一个弹出窗口 window (child window),内容如下:
<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>
并在此弹出 window 上,通过 javascript,在加载期间执行自动表单 post。
配置重定向 url,它会在成功登录后加载到具有 javascript 代码的页面,该代码会重新加载您的父级 window。类似于:
(function(){
if (opener) {
opener.postMessage("reload", '*');
window.close();
}
else {
window.location.assign('/');
}
}());
父 window 应该有一个监听器 post 由子 window 编辑的消息。类似于:
function listener(event){
if (event.data === "reload")
document.location.reload();
}
if (window.addEventListener){
addEventListener("message", listener, false)
} else {
attachEvent("onmessage", listener)
}
希望它能帮助寻找像这样非常微不足道的用例的解决方案的人。