java 跳转不在url显示_oauth2.0里回调地址返回code中如何让code不显示在URL里?

背景:

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

解决办法:

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

方法一:

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

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

window.location.replace(newUrl);

}

});

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

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

方法二:

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

利用history.pushState实现

if (location.href.indexOf("?code=")!=-1) {var newUrl = location.href.split("?")[0];

history.pushState('','',newUrl);//参数可省略

}

});

补充一下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()是替换当前记录;

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值