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 按钮登录。

我有的选项:

  1. 使用SignInAdapter将return重定向到URL。我们在 signIn() 方法中获取本机 Web 请求对象,但我无法找到一种方法来发送一些参数,比如回调 url,在初始登录表单 post 期间可能在 signIn 中可用()方法.

  2. 在 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)
}

希望它能帮助寻找像这样非常微不足道的用例的解决方案的人。