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