oauth2.0里回调地址返回code中如何让code不显示在URL里?
背景:
? ?最近在調(diào)用對(duì)方提供的oauth2.0接口的時(shí)候,返回code在URL顯示,但是會(huì)影響到本系統(tǒng)調(diào)用其他的菜單項(xiàng)的操作,所以想把返回的code值去掉。
解決辦法:
?? ?想了各種解決辦法,目前把自己解決辦法的經(jīng)過(guò)介紹給大家,有些辦法存在弊端,但是最終我還是使用了一個(gè)影響幾乎不大的辦法,供大家學(xué)習(xí)參考!
方法一:
本人首先想到的是在源頭把code去掉,就是在后端獲取到code,accessToken,refreshToke等參數(shù)之后,把返回的URL地址修改掉,可是發(fā)現(xiàn)這個(gè)辦法有點(diǎn)難,因?yàn)閛auth 2.0的機(jī)制就是如此。
也許會(huì)有其他在后端解決的方法,我只是沒(méi)有深入的去研究了。于是,我就想在前端去解決,把返回的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>這個(gè)辦法雖然可以解決,但是跳轉(zhuǎn)到該頁(yè)面的時(shí)候,頁(yè)面先加載一下,然后就刷新了一下,這樣會(huì)導(dǎo)致頁(yè)面效果不好,體驗(yàn)也非常的不好,而且還導(dǎo)致后臺(tái)報(bào)一個(gè)錯(cuò)誤,大概意思是:org.apache.catalina.connector.ClientAbortException: java.io.IOException: 遠(yuǎn)程主機(jī)強(qiáng)迫關(guān)閉了一個(gè)現(xiàn)有的連接。。。。。。。
應(yīng)該就是說(shuō)一個(gè)頁(yè)面還沒(méi)加載完,又重新加載一個(gè)頁(yè)面。導(dǎo)致必須關(guān)閉一個(gè)連接。因?yàn)槲野焉厦娲a屏蔽掉后,就不報(bào)這個(gè)錯(cuò)誤了。所以我就打算放棄這個(gè)方法,找其他解決辦法。
?
方法二:
? ?思來(lái)想去,突然一個(gè)念頭閃現(xiàn),會(huì)不會(huì)存在一個(gè)方法,修改URL地址,但是不刷新頁(yè)面呢?于是便在網(wǎng)上搜索了一下,還真的存在。
利用history.pushState實(shí)現(xiàn)
<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);//參數(shù)可省略 }}); </script>補(bǔ)充一下pushState與replaceState的知識(shí):
兩者都是html5的新特性,支持IE10以上,都有三個(gè)參數(shù):
以history.pushState(state,title,url)為例:
(1)state:存儲(chǔ)JSON字符串,可以用在popstate事件中。
(2)title:現(xiàn)在大多數(shù)瀏覽器不支持或者忽略這個(gè)參數(shù),最好用null代替。
(3)url:任意有效的URL,用于更新瀏覽器的地址欄,并不在乎URL是否已經(jīng)存在地址列表中。更重要的是,它不會(huì)重新加載頁(yè)面。
history.replaceState(state,title,url)
用新的state和URL替換當(dāng)前。不會(huì)造成頁(yè)面刷新。
state:與要跳轉(zhuǎn)到的URL對(duì)應(yīng)的狀態(tài)信息。
title:不知道干啥用,傳空字符串就行了。
url:要跳轉(zhuǎn)到的URL地址,不能跨域。
兩者的區(qū)別:
pushState()是在history棧中新建一個(gè)歷史記錄,而replaceState()是替換當(dāng)前記錄;
?
以上是我解決這個(gè)問(wèn)題的經(jīng)過(guò),希望有此問(wèn)題困惑的人,能看到這篇文章,供您參考!
如果這篇文章對(duì)您有所幫助,請(qǐng)隨便打賞一下作為鼓勵(lì),我會(huì)再接再厲的!!!
?
轉(zhuǎn)載于:https://www.cnblogs.com/zhangliang88/p/10978702.html
總結(jié)
以上是生活随笔為你收集整理的oauth2.0里回调地址返回code中如何让code不显示在URL里?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql 导入sql文件,source
- 下一篇: git 创建 本地 裸 仓库