Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Spring Social-如何重定向到原始URL或通过带有重新加载的弹出窗口/Iframe进行身份验证_Javascript_Spring_Jakarta Ee_Oauth 2.0_Spring Social - Fatal编程技术网

Javascript Spring Social-如何重定向到原始URL或通过带有重新加载的弹出窗口/Iframe进行身份验证

Javascript Spring Social-如何重定向到原始URL或通过带有重新加载的弹出窗口/Iframe进行身份验证,javascript,spring,jakarta-ee,oauth-2.0,spring-social,Javascript,Spring,Jakarta Ee,Oauth 2.0,Spring Social,我有一个web应用程序,它使用SpringSecurity和SpringSocialIntegration。我已在应用程序的菜单上放置了登录按钮(form post),可从任何路径/网页访问该按钮。我可以通过在我的网页上发布/signin/{provider}来登录,该网页重定向到谷歌的登录页面进行身份验证,并且在成功身份验证后重定向回一个“配置的URL”。我希望这个URL是动态的,这样用户会被重定向回原始URL,在那里用户单击了使用谷歌登录按钮 我有以下选择: 用于返回要重定向到的URL。我们

我有一个web应用程序,它使用SpringSecurity和SpringSocialIntegration。我已在应用程序的菜单上放置了登录按钮(form post),可从任何路径/网页访问该按钮。我可以通过在我的网页上发布/signin/{provider}来登录,该网页重定向到谷歌的登录页面进行身份验证,并且在成功身份验证后重定向回一个“配置的URL”。我希望这个URL是动态的,这样用户会被重定向回原始URL,在那里用户单击了使用谷歌登录按钮

我有以下选择:

  • 用于返回要重定向到的URL。我们在signIn()方法中获得了本机web请求对象,但我无法找到在初始signIn表单post期间发送一些参数的方法,比如回调url,这可能在signIn()方法中可用

  • 在FormPost上,不要在同一窗口中重定向,而是打开一个iframe/弹出窗口来处理post响应(实际上是类似于提供者url的)。验证成功后,重新加载父页面。但这里iframe不允许跨域URL。对于弹出窗口,我不知道如何在弹出窗口中显示表单post响应


  • 这是一个电子商务应用程序,因此希望在安全性和用户约束(如阻塞的POPU)方面争取一些最佳实践。

    最终使用问题中提到的第二种方法实现了它。不要直接点击“使用谷歌登录”按钮进行登录表单发布(signin/{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>
    
    父窗口应具有子窗口发布的消息的侦听器。比如:

    (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)
    }
    

    希望它能帮助一些人找到这样一个非常琐碎的用例的解决方案。

    最终使用了问题中提到的第二种方法。不要直接点击“使用谷歌登录”按钮进行登录表单发布(signin/{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>
    
    父窗口应具有子窗口发布的消息的侦听器。比如:

    (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)
    }
    
    希望它能帮助一些人找到这样一个非常琐碎的用例的解决方案