|
|
@@ -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)
|
|
|
{
|