单点登录操作流程:客户单通过携带值得url路径跳转,白名单界面通过url中得id,key请求后端数据渲染界面。
浏览器URL中输入
http://localhost:8088/taxBureauLogin?id=1206&key=zE9+TICzsrej...
浏览器转义为 http://localhost:8088/taxBureauLoginid=1206&key=zE9%20TICzsre...
前端vue在界面created函数里面获取 key值传给后端,
let searchParams = new URLSearchParams(window.location.search);
但是获取得searchParams得key传给后端拿到后变成了
原字符:zE9+TICzsrejfujj/BXjCQ== 拿到后:zE9 TICzsrejfujj/BXjCQ==
!!!特殊字符被转义 + 变成了空格 ,360浏览器中/ 也被转义,
期望得到浏览器中输入得原格式!大佬们给个招!
不考虑正则因为不确定要传过来有没有空格
后台生成
token
最好是通过Base64URL
转换一下,避免出现+
、/
和=
这些有特殊含义的字符。如果后台不想改,那么就算OP和其他回答中说的一样使用 encodeURIComponent 处理获取到的
token
值。如果项目使用的vue-router
是3x
版本,那么在打开页面的时候vue-router
会自动把对应的特殊字符解码了,我们再使用location
API来获取URL信息也是已经转义过的字符串数据了。OP使用 devTools 输入一下的测试代码测试一下你就明白了:
如果
vue-router
是4.x
就不会有这个问题。所以我的建议还是在单点登录生成
token
的时候就把这这些特殊字符处理掉,而不是丢给前端处理。