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()是替換當前記錄;

 

以上是我解決這個問題的經過,希望有此問題困惑的人,能看到這篇文章,供您參考!

如果這篇文章對您有所幫助,請隨便打賞一下作為鼓勵,我會再接再厲的!!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM