1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- package com.backendsys.modules.system.utils;
- import cn.hutool.core.convert.Convert;
- import cn.hutool.core.date.DateUnit;
- import cn.hutool.core.date.DateUtil;
- import cn.hutool.core.util.StrUtil;
- import cn.hutool.json.JSONUtil;
- import com.backendsys.modules.common.config.redis.utils.RedisUtil;
- import com.backendsys.modules.common.config.security.entity.SecurityUserInfo;
- import com.backendsys.modules.common.config.security.utils.JwtUtil;
- import com.backendsys.modules.system.entity.SysUserInfo;
- import com.backendsys.modules.system.entity.TokenCatch;
- import com.backendsys.modules.system.service.SysCommonService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Component;
- import java.util.Date;
- import java.util.List;
- import java.util.concurrent.TimeUnit;
- @Component
- public class UserUtil {
- @Autowired
- private JwtUtil jwtUtil;
- @Autowired
- private RedisUtil redisUtil;
-
- @Autowired
- private SysCommonService sysCommonService;
- @Value("${REDIS_LOGIN_TOKEN_PREFIX}")
- private String REDIS_LOGIN_TOKEN_PREFIX;
- public static final long SEVEN_DAYS_MILLIS = 7L * 24 * 60 * 60 * 1000;
- /**
- * 实时更新缓存: 用户信息
- */
- public SysUserInfo syncUpdateUserCatch(SysUserInfo userInfo, Integer tokenDurationHours, Boolean isRemember) {
- // -- 重置过期时间 -----------------------------------
- Integer durationHours = tokenDurationHours != null ? tokenDurationHours : Convert.toInt(SEVEN_DAYS_MILLIS / 3600000L);
- Long tokenDurationMilliseconds = getTokenDuration(isRemember);
- Date tokenExpiration = new Date((new Date()).getTime() + tokenDurationMilliseconds);
- userInfo.setToken_expiration(DateUtil.format(tokenExpiration, "yyyy-MM-dd HH:mm:ss"));
- // 生成 Token
- String lastLoginUuid = userInfo.getLast_login_uuid();
- SecurityUserInfo securityUserInfo = JSONUtil.toBean(JSONUtil.parseObj(userInfo), SecurityUserInfo.class);
- String token = jwtUtil.createSystemJwtToken(securityUserInfo);
- userInfo.setToken(token);
- // [Redis] 将 Token 与 Permission 存入缓存
- String tokenRedisKey = REDIS_LOGIN_TOKEN_PREFIX + lastLoginUuid;
- TokenCatch tokenCatch = new TokenCatch(token, userInfo.getPermission_ids());
- redisUtil.setCacheObject(tokenRedisKey, JSONUtil.toJsonStr(tokenCatch), durationHours, TimeUnit.HOURS);
- System.out.println("syncUpdateUserCatch = " + userInfo);
- return userInfo;
- }
- /**
- * 获得登录过期时间 (毫秒)
- */
- public Long getTokenDuration(Boolean isRemember) {
- System.out.println("isRemember = " + isRemember);
- // [系统配置] 系统用户默认登录过期时间(小时)
- Integer SYSTEM_USER_LOGIN_DURATION_DEFAULT = Convert.toInt(sysCommonService.getCommonByTag("SYSTEM_USER_LOGIN_DURATION_DEFAULT"));
- // 将小时转换为毫秒
- Long DEFAULT_MILLISECONDS = SYSTEM_USER_LOGIN_DURATION_DEFAULT * DateUnit.HOUR.getMillis();
- // 是否钩选 "7天免登录",否则按系统配置-默认过期时间
- Long tokenDurationMilliseconds = isRemember ? SEVEN_DAYS_MILLIS : DEFAULT_MILLISECONDS;
- return tokenDurationMilliseconds;
- }
- }
|