瀏覽代碼

11482-【CR】【投资系统】增加审批流程-单点登录

hxy 3 月之前
父節點
當前提交
825e850dd0

+ 40 - 2
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java

@@ -4,6 +4,13 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
 import javax.servlet.http.HttpServletRequest;
+
+import com.alibaba.fastjson2.JSON;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.MessageUtils;
+import com.ruoyi.framework.manager.AsyncManager;
+import com.ruoyi.framework.manager.factory.AsyncFactory;
+import com.ruoyi.system.service.ISysUserService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -54,6 +61,14 @@ public class TokenService
     @Autowired
     private RedisCache redisCache;
 
+    @Autowired
+    private ISysUserService userService;
+    @Autowired
+    private SysPermissionService permissionService;
+
+    @Autowired
+    private SysLoginService loginService;
+
     /**
      * 获取用户身份信息
      *
@@ -71,8 +86,31 @@ public class TokenService
                 // 解析对应的权限以及用户信息
                 String uuid = (String) claims.get(Constants.LOGIN_USER_KEY);
                 String userKey = getTokenKey(uuid);
-                LoginUser user = redisCache.getCacheObject(userKey);
-                return user;
+                Object cacheObject = redisCache.getCacheObject(userKey);
+                if (cacheObject == null){
+                    return null;
+                }
+                LoginUser loginUser = new LoginUser();
+                String packageName = cacheObject.getClass().getPackage().getName();
+                if (packageName.contains("ruoyi")) {
+                    loginUser = redisCache.getCacheObject(userKey);
+                }else if(packageName.contains("json")) {
+                    String jsonString = cacheObject.toString(); // 如果 jsonObject 是 JSONObject 类型的实例
+                    LoginUser loginUser1 = JSON.parseObject(jsonString, LoginUser.class);
+                    SysUser user = userService.selectUserByUserName(loginUser1.getUser().getUserName());
+                    loginUser = new LoginUser(user.getUserId(), user.getDeptId(), user, permissionService.getMenuPermission(user));
+                    loginUser.setToken(loginUser1.getToken());
+                    loginUser.setExpireTime(loginUser1.getExpireTime());
+                    //记录登录日志
+                    AsyncManager.me().execute(AsyncFactory.recordLogininfor(user.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
+                    //单点登录补充对应用户redis信息
+                    setUserAgent(loginUser);
+                    //单点登录将用户redis信息重新缓存
+                    refreshToken(loginUser);
+                    //更改登录状态
+                    loginService.recordLoginInfo(loginUser.getUserId());
+                }
+                return loginUser;
             }
             catch (Exception e)
             {

+ 15 - 5
ruoyi-ui/src/permission.js

@@ -3,7 +3,7 @@ import store from './store'
 import { Message } from 'element-ui'
 import NProgress from 'nprogress'
 import 'nprogress/nprogress.css'
-import { getToken } from '@/utils/auth'
+import { getToken,setToken } from '@/utils/auth'
 import { isRelogin } from '@/utils/request'
 
 NProgress.configure({ showSpinner: false })
@@ -12,6 +12,13 @@ const whiteList = ['/login', '/register']
 
 router.beforeEach((to, from, next) => {
   NProgress.start()
+
+  const path = to.path;
+  const token = to.query.Authorization;
+  if (path.indexOf('auth') != -1 && token) {
+    setToken(token);
+    next({ path: '/' });
+  }
   if (getToken()) {
     to.meta.title && store.dispatch('settings/setTitle', to.meta.title)
     /* has token*/
@@ -36,13 +43,15 @@ router.beforeEach((to, from, next) => {
             store.dispatch("getMyTaskInvestigateNumber"); //初始化尽职背调代办数量
             store.dispatch("getMyTaskDecisionNumber"); //初始化项目投决代办数量
             store.dispatch("getMyTaskTerminationNumber"); //初始化项目终止代办数量
-            next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
+            //next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
+            next({ path: '/' })
 
           })
         }).catch(err => {
           store.dispatch('LogOut').then(() => {
-            Message.error(err)
-            next({ path: '/' })
+            location.href = 'http://dgt.dgtis.com/oneportal/login';
+            /*Message.error(err)
+            next({ path: '/' })*/
           })
         })
       } else {
@@ -55,7 +64,8 @@ router.beforeEach((to, from, next) => {
       // 在免登录白名单,直接进入
       next()
     } else {
-      next(`/login?redirect=${encodeURIComponent(to.fullPath)}`) // 否则全部重定向到登录页
+     // next(`/login?redirect=${encodeURIComponent(to.fullPath)}`) // 否则全部重定向到登录页
+      location.href = 'http://dgt.dgtis.com/oneportal/login';
       NProgress.done()
     }
   }

+ 1 - 1
ruoyi-ui/src/router/index.js

@@ -486,7 +486,7 @@ Router.prototype.replace = function push(location) {
 }
 
 export default new Router({
-  mode: 'history', // 去掉url中的#
+  // mode: 'history', // 去掉url中的#
   scrollBehavior: () => ({ y: 0 }),
   routes: constantRoutes
 })