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()是替換當前記錄;
?
以上是我解決這個問題的經過,希望有此問題困惑的人,能看到這篇文章,供您參考!
如果這篇文章對您有所幫助,請隨便打賞一下作為鼓勵,我會再接再厲的!!!
?
轉載于:https://www.cnblogs.com/zhangliang88/p/10978702.html
總結
以上是生活随笔為你收集整理的oauth2.0里回调地址返回code中如何让code不显示在URL里?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 导入sql文件,source
- 下一篇: git 创建 本地 裸 仓库