UserUtil.java 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package com.backendsys.modules.system.utils;
  2. import cn.hutool.core.convert.Convert;
  3. import cn.hutool.core.date.DateUnit;
  4. import cn.hutool.core.date.DateUtil;
  5. import cn.hutool.core.util.StrUtil;
  6. import cn.hutool.json.JSONUtil;
  7. import com.backendsys.modules.common.config.redis.utils.RedisUtil;
  8. import com.backendsys.modules.common.config.security.entity.SecurityUserInfo;
  9. import com.backendsys.modules.common.config.security.utils.JwtUtil;
  10. import com.backendsys.modules.system.entity.SysUserInfo;
  11. import com.backendsys.modules.system.entity.TokenCatch;
  12. import com.backendsys.modules.system.service.SysCommonService;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.beans.factory.annotation.Value;
  15. import org.springframework.stereotype.Component;
  16. import java.util.Date;
  17. import java.util.List;
  18. import java.util.concurrent.TimeUnit;
  19. @Component
  20. public class UserUtil {
  21. @Autowired
  22. private JwtUtil jwtUtil;
  23. @Autowired
  24. private RedisUtil redisUtil;
  25. @Autowired
  26. private SysCommonService sysCommonService;
  27. @Value("${REDIS_LOGIN_TOKEN_PREFIX}")
  28. private String REDIS_LOGIN_TOKEN_PREFIX;
  29. public static final long SEVEN_DAYS_MILLIS = 7L * 24 * 60 * 60 * 1000;
  30. /**
  31. * 实时更新缓存: 用户信息
  32. */
  33. public SysUserInfo syncUpdateUserCatch(SysUserInfo userInfo, Integer tokenDurationHours, Boolean isRemember) {
  34. // -- 重置过期时间 -----------------------------------
  35. Integer durationHours = tokenDurationHours != null ? tokenDurationHours : Convert.toInt(SEVEN_DAYS_MILLIS / 3600000L);
  36. Long tokenDurationMilliseconds = getTokenDuration(isRemember);
  37. Date tokenExpiration = new Date((new Date()).getTime() + tokenDurationMilliseconds);
  38. userInfo.setToken_expiration(DateUtil.format(tokenExpiration, "yyyy-MM-dd HH:mm:ss"));
  39. // 生成 Token
  40. String lastLoginUuid = userInfo.getLast_login_uuid();
  41. SecurityUserInfo securityUserInfo = JSONUtil.toBean(JSONUtil.parseObj(userInfo), SecurityUserInfo.class);
  42. String token = jwtUtil.createSystemJwtToken(securityUserInfo);
  43. userInfo.setToken(token);
  44. // [Redis] 将 Token 与 Permission 存入缓存
  45. String tokenRedisKey = REDIS_LOGIN_TOKEN_PREFIX + lastLoginUuid;
  46. TokenCatch tokenCatch = new TokenCatch(token, userInfo.getPermission_ids());
  47. redisUtil.setCacheObject(tokenRedisKey, JSONUtil.toJsonStr(tokenCatch), durationHours, TimeUnit.HOURS);
  48. System.out.println("syncUpdateUserCatch = " + userInfo);
  49. return userInfo;
  50. }
  51. /**
  52. * 获得登录过期时间 (毫秒)
  53. */
  54. public Long getTokenDuration(Boolean isRemember) {
  55. System.out.println("isRemember = " + isRemember);
  56. // [系统配置] 系统用户默认登录过期时间(小时)
  57. Integer SYSTEM_USER_LOGIN_DURATION_DEFAULT = Convert.toInt(sysCommonService.getCommonByTag("SYSTEM_USER_LOGIN_DURATION_DEFAULT"));
  58. // 将小时转换为毫秒
  59. Long DEFAULT_MILLISECONDS = SYSTEM_USER_LOGIN_DURATION_DEFAULT * DateUnit.HOUR.getMillis();
  60. // 是否钩选 "7天免登录",否则按系统配置-默认过期时间
  61. Long tokenDurationMilliseconds = isRemember ? SEVEN_DAYS_MILLIS : DEFAULT_MILLISECONDS;
  62. return tokenDurationMilliseconds;
  63. }
  64. }