|
@@ -60,6 +60,7 @@ let publicKey2 = '041967638ca43d4577d8dba166bff4437fde944270101f398a95b846ec2f81
|
|
|
let privateKey1 = '27ce6eec39dbf3b564a77c4da1e129fe1ba01a92f6d61055a33ed14ffcbc949e'
|
|
|
|
|
|
Vue.prototype.$axios.interceptors.request.use(
|
|
|
+
|
|
|
config => {
|
|
|
// get请求映射params参数
|
|
|
if (config.method === 'get' && config.params) {
|
|
@@ -85,7 +86,6 @@ Vue.prototype.$axios.interceptors.request.use(
|
|
|
}
|
|
|
|
|
|
if (sessionStorage.getItem("token")!=="undefined" && sessionStorage.getItem("token")!==undefined && sessionStorage.getItem("token")!=null) { // 判断是否存在token,如果存在的话,则每个http header都加上token
|
|
|
- alert('存在')
|
|
|
let tokenStr = doEncrypt(sessionStorage.getItem("token"))
|
|
|
config.headers['Authorization'] = tokenStr
|
|
|
config.headers['TokenSign'] = doSign(sessionStorage.getItem("token"))
|
|
@@ -94,31 +94,19 @@ Vue.prototype.$axios.interceptors.request.use(
|
|
|
},
|
|
|
error => {
|
|
|
// do something with request error
|
|
|
- console.log(error) // for debug
|
|
|
+ // console.log(error) // for debug
|
|
|
return Promise.reject(error)
|
|
|
}
|
|
|
)
|
|
|
|
|
|
-function getBrowserUser() {
|
|
|
- var user = "";
|
|
|
- var ca = document.cookie.split(';');
|
|
|
- for (var i = 0; i < ca.length; i++) {
|
|
|
- var c = ca[i].trim();
|
|
|
- if (c.indexOf("user=") == 0) {
|
|
|
- user = c.substring("user=".length, c.length);
|
|
|
- }
|
|
|
- }
|
|
|
- return user
|
|
|
-}
|
|
|
+// 是否正在刷新的标记
|
|
|
+let isRefreshing = false
|
|
|
+//重试队列
|
|
|
+let requests = []
|
|
|
|
|
|
// response interceptor
|
|
|
Vue.prototype.$axios.interceptors.response.use(
|
|
|
/**
|
|
|
- * If you want to get http information such as headers or status
|
|
|
- * Please return response => response
|
|
|
- */
|
|
|
-
|
|
|
- /**
|
|
|
* Determine the request status by custom code
|
|
|
* Here is just an example
|
|
|
* You can also judge the status by HTTP Status Code
|
|
@@ -139,11 +127,12 @@ Vue.prototype.$axios.interceptors.response.use(
|
|
|
// if the custom code is not 20000, it is judged as an error.
|
|
|
//console.log(res.code)
|
|
|
if (data.code !== 0) {
|
|
|
- Message({
|
|
|
- message: data.message || 'Error',
|
|
|
- type: 'error',
|
|
|
- duration: 5 * 1000
|
|
|
- })
|
|
|
+ // alert('准备error输出')
|
|
|
+ // Message({
|
|
|
+ // message: data.message || 'Error',
|
|
|
+ // type: 'error',
|
|
|
+ // duration: 5 * 1000
|
|
|
+ // })
|
|
|
|
|
|
// 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
|
|
|
if (data.code === 50008 || data.code === 50012 || data.code === 50014) {
|
|
@@ -163,7 +152,7 @@ Vue.prototype.$axios.interceptors.response.use(
|
|
|
return data
|
|
|
}
|
|
|
},
|
|
|
- error => {
|
|
|
+ async error => {
|
|
|
if (error.response) {
|
|
|
switch (error.response.status) {
|
|
|
case 401:
|
|
@@ -203,15 +192,59 @@ Vue.prototype.$axios.interceptors.response.use(
|
|
|
console.log('服务器关闭了!')
|
|
|
resetRouter()
|
|
|
break
|
|
|
+ case 409:
|
|
|
+ if (!isRefreshing) {
|
|
|
+ isRefreshing = true
|
|
|
+ //调用刷新token的接口
|
|
|
+ return await Vue.prototype.$axios.post(
|
|
|
+ '/refreshToken'
|
|
|
+ ).then((res) => {
|
|
|
+ // const { token } = res.data
|
|
|
+ // 替换token
|
|
|
+ sessionStorage.setItem('token', res.data)
|
|
|
+ // Vue.prototype.$axios(error.response.config)
|
|
|
+ // 重新请求接口 前过期的接口
|
|
|
+ error.config.headers.Authorization = res.data;
|
|
|
+ requests.length > 0 && requests.map((cb) => {
|
|
|
+ cb();
|
|
|
+ });
|
|
|
+ requests = []; //注意要清空
|
|
|
+ ///////////////////////////////问媛媛////////////////////
|
|
|
+ error.config.url='/sysUserController/getAll'
|
|
|
+ return Vue.prototype.$axios.request(error.config);
|
|
|
+ // return error.response.config
|
|
|
+ }).catch(err => {
|
|
|
+ console.log(err)
|
|
|
+ //跳到登录页
|
|
|
+ removeToken()
|
|
|
+ router.push('/login')
|
|
|
+ // return Promise.reject(err)
|
|
|
+ }).finally(() => {
|
|
|
+ isRefreshing = false
|
|
|
+ })
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ // 正在刷新token ,把后来的接口缓冲起来
|
|
|
+ return new Promise((resolve) => {
|
|
|
+ requests.push(() => {
|
|
|
+ error.config.headers.Authorization = sessionStorage.getItem('token');
|
|
|
+ resolve(Vue.prototype.$axios.request(error.config));
|
|
|
+ });
|
|
|
+ })
|
|
|
+ }
|
|
|
+ break
|
|
|
+ // return Promise.reject(error.response.data)
|
|
|
}
|
|
|
}
|
|
|
+ else{
|
|
|
+ return Promise.reject(error)
|
|
|
+ }
|
|
|
/* console.log('err' + error) // for debug
|
|
|
Message({
|
|
|
message: error.message,
|
|
|
type: 'error',
|
|
|
duration: 5 * 1000
|
|
|
})*/
|
|
|
- return Promise.reject(error)
|
|
|
}
|
|
|
)
|
|
|
|