|
|
@@ -3,6 +3,8 @@ package com.gz.service.system.impl;
|
|
|
import cn.hutool.captcha.CaptchaUtil;
|
|
|
import cn.hutool.captcha.CircleCaptcha;
|
|
|
import cn.hutool.captcha.LineCaptcha;
|
|
|
+import cn.hutool.core.codec.Base62;
|
|
|
+import cn.hutool.core.codec.Base64;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.lang.tree.Tree;
|
|
|
import cn.hutool.core.lang.tree.TreeNodeConfig;
|
|
|
@@ -161,6 +163,59 @@ public class AuthServiceImpl implements AuthService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ public LoginRVO login(String base64) {
|
|
|
+ String account = Base64.decodeStr(base64);
|
|
|
+ // 查询用户参数
|
|
|
+ AdminDTO param = new AdminDTO();
|
|
|
+ // 根据用户名查
|
|
|
+ param.setAccount(account);
|
|
|
+ AdminDTO loginDTO = adminMapper.selectOne(param);
|
|
|
+ // 用户名没查到
|
|
|
+ if (loginDTO == null) {
|
|
|
+ throw new BusinessException(CustomExceptionEnum.ACCOUNT_OR_PASSWORD_INCORRECT);
|
|
|
+ }
|
|
|
+ // 用户禁用
|
|
|
+ if (loginDTO.getStatus().equals(DataGlobalVariable.USER_STATUS_DISABLE)) {
|
|
|
+ log.warn("账号{}已禁用 无法登录", account);
|
|
|
+ throw new BusinessException(CustomExceptionEnum.ACCOUNT_DISABLE);
|
|
|
+ }
|
|
|
+ DeptDTO deptDTO = deptMapper.selectByPrimaryKey(loginDTO.getDeptId());
|
|
|
+ // 用户设置的权限
|
|
|
+ Integer roleId = loginDTO.getRoleId();
|
|
|
+ // 登录用户未设置权限
|
|
|
+ if (roleId == null) {
|
|
|
+ // 获取部门权限
|
|
|
+ roleId = deptDTO.getRoleId();
|
|
|
+ // 当前部门也未设置权限
|
|
|
+ if (roleId == null) {
|
|
|
+ roleId = this.getRoleId(deptDTO.getParentId());
|
|
|
+ }
|
|
|
+ if (roleId == null) {
|
|
|
+ throw new BusinessException(CustomExceptionEnum.ACCOUNT_NOT_ROLE);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 生成jwt载体
|
|
|
+ JwtPayload jwtPayload = new JwtPayload(loginDTO.getId(), loginDTO.getAccount(), loginDTO.getAdminName(), roleId, loginDTO.getDeptId(), deptDTO.getDeptName());
|
|
|
+ // token
|
|
|
+ String token = JwtUtils.createToken(jwtPayload, JwtConfig.ACCESS_TOKEN_EFFECTIVE);
|
|
|
+ // refreshToken
|
|
|
+ String refreshToken = IdUtil.simpleUUID();
|
|
|
+ // 存储token的key
|
|
|
+ String refreshTokenKey = String.format(JwtConfig.REFRESH_TOKEN_KEY_FORMAT, refreshToken);
|
|
|
+ // 设置当前有效的Token
|
|
|
+ stringRedisTemplate.opsForHash().put(refreshTokenKey, JwtConfig.REDIS_JWT_TOKEN_KEY, token);
|
|
|
+ // 存储载体
|
|
|
+ stringRedisTemplate.opsForHash().put(refreshTokenKey, JwtConfig.REDIS_JWT_PAYLOAD_KEY, JSONObject.toJSONString(jwtPayload));
|
|
|
+ // refresh token 设置过期时间
|
|
|
+ stringRedisTemplate.expire(refreshTokenKey, JwtConfig.REFRESH_TOKEN_EXPIRE_TIME, TimeUnit.SECONDS);
|
|
|
+ // 记录登录日志
|
|
|
+ logMapper.insertSelective(new LogDTO(DataGlobalVariable.LOGIN_LOG_CODE, "系统管理", "登录", "com.gz.controller.system.login", null, null, RequestUtils.getIpAddress(request), null, null));
|
|
|
+ log.info("一体化平台跳转登录成");
|
|
|
+ return new LoginRVO(token, refreshToken, System.currentTimeMillis());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
public LoginRVO refreshToken(String refreshToken) {
|
|
|
String refreshTokenKey = String.format(JwtConfig.REFRESH_TOKEN_KEY_FORMAT, refreshToken);
|
|
|
String payload = (String) stringRedisTemplate.opsForHash().get(refreshTokenKey, JwtConfig.REDIS_JWT_PAYLOAD_KEY);
|