|
|
|
@@ -6,7 +6,6 @@ import cn.hutool.core.lang.UUID;
|
|
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
|
import cn.hutool.http.HttpRequest;
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
|
|
import com.gxwebsoft.auto.dto.*;
|
|
|
|
|
import com.gxwebsoft.auto.service.QrLoginService;
|
|
|
|
|
import com.gxwebsoft.common.core.config.ConfigProperties;
|
|
|
|
@@ -18,7 +17,6 @@ import com.gxwebsoft.common.system.service.UserService;
|
|
|
|
|
import com.gxwebsoft.common.system.service.WxService;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
import org.springframework.data.redis.core.RedisTemplate;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
@@ -60,8 +58,8 @@ public class QrLoginServiceImpl implements QrLoginService {
|
|
|
|
|
QrLoginData qrLoginData = new QrLoginData();
|
|
|
|
|
qrLoginData.setToken(token);
|
|
|
|
|
qrLoginData.setStatus(QR_LOGIN_STATUS_PENDING);
|
|
|
|
|
qrLoginData.setCreateTime(DateUtil.date());
|
|
|
|
|
qrLoginData.setExpireTime(DateUtil.offsetSecond(DateUtil.date(), QR_LOGIN_TOKEN_TTL.intValue()));
|
|
|
|
|
qrLoginData.setCreateTime(DateUtil.formatDateTime(DateUtil.date()));
|
|
|
|
|
qrLoginData.setExpireTime(DateUtil.formatDateTime(DateUtil.offsetSecond(DateUtil.date(), QR_LOGIN_TOKEN_TTL.intValue())));
|
|
|
|
|
|
|
|
|
|
// 存储到Redis,设置过期时间
|
|
|
|
|
String redisKey = QR_LOGIN_TOKEN_KEY + token;
|
|
|
|
@@ -106,26 +104,27 @@ public class QrLoginServiceImpl implements QrLoginService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 检查是否过期
|
|
|
|
|
if (DateUtil.date().after(qrLoginData.getExpireTime())) {
|
|
|
|
|
if (DateUtil.date().after(DateUtil.parseDateTime(qrLoginData.getExpireTime()))) {
|
|
|
|
|
// 删除过期的token
|
|
|
|
|
redisUtil.delete(redisKey);
|
|
|
|
|
return new QrLoginStatusResponse(QR_LOGIN_STATUS_EXPIRED, null, null, 0L);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 计算剩余过期时间
|
|
|
|
|
long expiresIn = (qrLoginData.getExpireTime().getTime() - DateUtil.date().getTime()) / 1000;
|
|
|
|
|
long expiresIn = (DateUtil.parseDateTime(qrLoginData.getExpireTime()).getTime() - DateUtil.date().getTime()) / 1000;
|
|
|
|
|
|
|
|
|
|
QrLoginStatusResponse response = new QrLoginStatusResponse();
|
|
|
|
|
response.setStatus(qrLoginData.getStatus());
|
|
|
|
|
response.setExpiresIn(expiresIn);
|
|
|
|
|
response.setTenantId(qrLoginData.getTenantId());
|
|
|
|
|
|
|
|
|
|
// 如果已确认,返回token和用户信息
|
|
|
|
|
if (QR_LOGIN_STATUS_CONFIRMED.equals(qrLoginData.getStatus())) {
|
|
|
|
|
response.setAccessToken(qrLoginData.getAccessToken());
|
|
|
|
|
|
|
|
|
|
// 获取用户信息
|
|
|
|
|
if (qrLoginData.getUserId() != null) {
|
|
|
|
|
User user = userService.getByIdRel(qrLoginData.getUserId());
|
|
|
|
|
User user = userService.getAllByUserId("" + qrLoginData.getUserId());
|
|
|
|
|
System.out.println("qrLoginData->user = " + user);
|
|
|
|
|
if (user != null) {
|
|
|
|
|
// 清除敏感信息
|
|
|
|
|
user.setPassword(null);
|
|
|
|
@@ -134,7 +133,7 @@ public class QrLoginServiceImpl implements QrLoginService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 确认后删除token,防止重复使用
|
|
|
|
|
redisUtil.delete(redisKey);
|
|
|
|
|
// redisUtil.delete(redisKey);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return response;
|
|
|
|
@@ -157,7 +156,7 @@ public class QrLoginServiceImpl implements QrLoginService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 检查是否过期
|
|
|
|
|
if (DateUtil.date().after(qrLoginData.getExpireTime())) {
|
|
|
|
|
if (DateUtil.date().after(DateUtil.parseDateTime(qrLoginData.getExpireTime()))) {
|
|
|
|
|
redisUtil.delete(redisKey);
|
|
|
|
|
throw new RuntimeException("扫码登录token已过期");
|
|
|
|
|
}
|
|
|
|
@@ -173,7 +172,6 @@ public class QrLoginServiceImpl implements QrLoginService {
|
|
|
|
|
throw new RuntimeException("用户已被冻结");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
System.out.println("扫码登录->user = " + user);
|
|
|
|
|
// 生成JWT token
|
|
|
|
|
JwtSubject jwtSubject = new JwtSubject(user.getUsername(), user.getTenantId());
|
|
|
|
|
String accessToken = JwtUtil.buildToken(jwtSubject, configProperties.getTokenExpireTime(), configProperties.getTokenKey());
|
|
|
|
@@ -183,9 +181,8 @@ public class QrLoginServiceImpl implements QrLoginService {
|
|
|
|
|
qrLoginData.setUserId(userId);
|
|
|
|
|
qrLoginData.setUsername(user.getUsername());
|
|
|
|
|
qrLoginData.setAccessToken(accessToken);
|
|
|
|
|
qrLoginData.setTenantId(user.getTenantId());
|
|
|
|
|
System.out.println("qrLoginData = " + qrLoginData);
|
|
|
|
|
System.out.println("token = " + token);
|
|
|
|
|
System.out.println("getUsername. = " + user.getUsername());
|
|
|
|
|
// 更新Redis中的数据
|
|
|
|
|
redisUtil.set(redisKey, qrLoginData, 60L, TimeUnit.SECONDS); // 给前端60秒时间获取token
|
|
|
|
|
|
|
|
|
@@ -211,7 +208,7 @@ public class QrLoginServiceImpl implements QrLoginService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 检查是否过期
|
|
|
|
|
if (DateUtil.date().after(qrLoginData.getExpireTime())) {
|
|
|
|
|
if (DateUtil.date().after(DateUtil.parseDateTime(qrLoginData.getExpireTime()))) {
|
|
|
|
|
redisUtil.delete(redisKey);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
@@ -221,7 +218,7 @@ public class QrLoginServiceImpl implements QrLoginService {
|
|
|
|
|
qrLoginData.setStatus(QR_LOGIN_STATUS_SCANNED);
|
|
|
|
|
|
|
|
|
|
// 计算剩余过期时间
|
|
|
|
|
long remainingSeconds = (qrLoginData.getExpireTime().getTime() - DateUtil.date().getTime()) / 1000;
|
|
|
|
|
long remainingSeconds = (DateUtil.parseDateTime(qrLoginData.getExpireTime()).getTime() - DateUtil.date().getTime()) / 1000;
|
|
|
|
|
redisUtil.set(redisKey, qrLoginData, remainingSeconds, TimeUnit.SECONDS);
|
|
|
|
|
|
|
|
|
|
log.info("扫码登录token {} 状态更新为已扫码", token);
|
|
|
|
|