Переглянути джерело

修复token无感刷新错误

xusl 2 роки тому
батько
коміт
83671c75fd

+ 1 - 0
backend/src/main/java/com/jiayue/ssi/controller/UserLoginController.java

@@ -152,6 +152,7 @@ public class UserLoginController {
             throws Exception {
         String oldToken = httpServletRequest.getHeader("Authorization");
         String newToken = jwtTokenUtil.refreshToken(oldToken);
+        CacheConstants.LOGIN_TOKEN_MAP.put(SecurityContextUtil.getSysUser().getUsername(),newToken);
         return ResponseVO.success(newToken);
     }
 

+ 1 - 1
backend/src/main/java/com/jiayue/ssi/filter/JwtAuthenticationTokenFilter.java

@@ -44,7 +44,7 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
             String username = jwtTokenUtil.getUsernameFromToken(token);
             if (username != null){
                 if (CacheConstants.LOGIN_TOKEN_MAP.get(username)==null){
-                    ResponseInfo.doResponse(response, "服务器端无此token令牌,请重新登录!", 403);
+                    ResponseInfo.doResponse(response, "登录超时,请重新登录!", 403);
                     return;
                 }
                 else{

+ 1 - 1
ui/src/layout/components/Navbar.vue

@@ -215,7 +215,7 @@ export default {
               // 窗口关闭可以调用自动查询
               this.getAlarmData()
             }
-          }, 60000)
+          }, 60000000)
         }
         else{
           this.alarmIconShow=false

+ 12 - 8
ui/src/utils/request.js

@@ -18,12 +18,14 @@ service.interceptors.request.use(
     const isRepeatSubmit = (config.headers || {}).repeatSubmit === false
     // get请求映射params参数
     if (config.method === 'get' && config.params) {
-      // 参数加密
-      let encryptParam = doEncrypt(JSON.stringify(config.params))
-      // 参数签名
-      let paramSign = doSign(JSON.stringify(config.params))
-      let result = 'secretData=' + encryptParam + '&paramSign=' + paramSign
-      config.params = result
+      if (config.params.toString().indexOf('secretData') !=-1 && config.params.toString().indexOf('paramSign')){
+        // 不是token刷新后执行上次操作,进行参数加密。
+        let encryptParam = doEncrypt(JSON.stringify(config.params))
+        // 参数签名
+        let paramSign = doSign(JSON.stringify(config.params))
+        let result = 'secretData=' + encryptParam + '&paramSign=' + paramSign
+        config.params = result
+      }
     }
 
     if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put' || config.method === 'delete')) {
@@ -182,11 +184,13 @@ service.interceptors.response.use(
             isRefreshing = true
             //调用刷新token的接口
             return await  Vue.prototype.$axios.post(
-              '/refreshToken'
+              '/refreshToken',{}
             ).then((res) => {
               // const { token } = res.data
               // 替换token
-              sessionStorage.setItem('token', res.data)
+              let tokenStr = doEncrypt(res.data)
+              let sign = doSign(res.data)
+              sessionStorage.setItem('token', tokenStr+'&'+sign)
               // Vue.prototype.$axios(error.response.config)
               // 重新请求接口 前过期的接口
               error.config.headers.Authorization = res.data;