• oauth2.0里回调地址返回code中如何让code不显示在URL里?


    背景:

       最近在调用对方提供的oauth2.0接口的时候,返回code在URL显示,但是会影响到本系统调用其他的菜单项的操作,所以想把返回的code值去掉。

    解决办法:

        想了各种解决办法,目前把自己解决办法的经过介绍给大家,有些办法存在弊端,但是最终我还是使用了一个影响几乎不大的办法,供大家学习参考!

    方法一:

    本人首先想到的是在源头把code去掉,就是在后端获取到code,accessToken,refreshToke等参数之后,把返回的URL地址修改掉,可是发现这个办法有点难,因为oauth 2.0的机制就是如此。

    也许会有其他在后端解决的方法,我只是没有深入的去研究了。于是,我就想在前端去解决,把返回的URL地址修改一下,代码如下:

    <script type="text/javascript">
               $(document).ready(function() {
                var currenturl  = window.location.href;
                if (location.href.indexOf("?code=")!=-1) {
                    var newUrl = location.href.split("?")[0];
                    window.location.replace(newUrl);
                }
            });   
    </script>

    这个办法虽然可以解决,但是跳转到该页面的时候,页面先加载一下,然后就刷新了一下,这样会导致页面效果不好,体验也非常的不好,而且还导致后台报一个错误,大概意思是:org.apache.catalina.connector.ClientAbortException: java.io.IOException: 远程主机强迫关闭了一个现有的连接。。。。。。。

    应该就是说一个页面还没加载完,又重新加载一个页面。导致必须关闭一个连接。因为我把上面代码屏蔽掉后,就不报这个错误了。所以我就打算放弃这个方法,找其他解决办法。

    方法二:

       思来想去,突然一个念头闪现,会不会存在一个方法,修改URL地址,但是不刷新页面呢?于是便在网上搜索了一下,还真的存在。

    利用history.pushState实现

    <script type="text/javascript">
               $(document).ready(function() {
                var currenturl  = window.location.href;
                //alert("url="+url);
                if (location.href.indexOf("?code=")!=-1) {
                    var newUrl = location.href.split("?")[0];
                    history.pushState('','',newUrl);//参数可省略
                }
            });   
    </script> 

    补充一下pushState与replaceState的知识:

    两者都是html5的新特性,支持IE10以上,都有三个参数:

    以history.pushState(state,title,url)为例:

    (1)state:存储JSON字符串,可以用在popstate事件中。

    (2)title:现在大多数浏览器不支持或者忽略这个参数,最好用null代替。

    (3)url:任意有效的URL,用于更新浏览器的地址栏,并不在乎URL是否已经存在地址列表中。更重要的是,它不会重新加载页面。

    history.replaceState(state,title,url)

    用新的state和URL替换当前。不会造成页面刷新。

    state:与要跳转到的URL对应的状态信息。

    title:不知道干啥用,传空字符串就行了。

    url:要跳转到的URL地址,不能跨域。

    两者的区别:

    pushState()是在history栈中新建一个历史记录,而replaceState()是替换当前记录;

    以上是我解决这个问题的经过,希望有此问题困惑的人,能看到这篇文章,供您参考!

    如果这篇文章对您有所帮助,请随便打赏一下作为鼓励,我会再接再厉的!!!

  • 相关阅读:
    ACM/ICPC 之 中国剩余定理+容斥原理(HDU5768)
    ACM/ICPC 之 三维计算几何+暴力枚举+判重(HDU5839)
    ACM/ICPC 之 有流量上下界的网络流-Dinic(可做模板)(POJ2396)
    ACM/ICPC 之 Dinic+枚举最小割点集(可做模板)(POJ1815)
    ACM/ICPC 之 DP解有规律的最短路问题(POJ3377)
    ACM/ICPC 之 DFS+SPFA-贪心+最短路(POJ2679)
    ACM/ICPC 之 靠墙走-DFS+BFS(POJ3083)
    maven的setting.xml配置文件详解(中文)
    高性能、高可用的分布式架构体系(有启发的)
    各种数据库再spring中的配置(转载)
  • 原文地址:https://www.cnblogs.com/zhangliang88/p/10978702.html
Copyright © 2020-2023  润新知