Spring Social - 如何通过重新加载重定向到原始URL或通过Popup / Iframe进行身份验证

时间:2016-07-13 04:20:32

标签: javascript spring java-ee oauth-2.0 spring-social

我有一个使用Spring安全性和Spring社交集成的Web应用程序。我在应用程序的菜单上放置了登录按钮(表单帖子),可以从任何路径/网页访问。我可以通过在我的网页上发布/ signin / {provider}来登录,该网页重定向到google的登录页面进行身份验证,成功验证后重定向回“已配置的网址”。我希望此网址是动态的,以便用户重定向回用户点击使用Google登录按钮的原始网址。

我拥有的选项:

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

  2. 在FormPost上,不要在同一个窗口中重定向,而是打开iframe / popup来处理post响应(实际上是提供者url,如http://accounts.google.com/.....。)。成功验证后重新加载父页面。但这里的iframe不允许跨域网址。对于弹出窗口,我不知道如何在弹出窗口中提供表单发布回复。

  3. 这是一个电子商务应用程序,因此希望在安全性和用户限制方面(例如阻止的popus)争取一些最佳实践。

1 个答案:

答案 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)
}

希望它可以帮助那些寻找解决方案的人这样一个非常简单的用例。