Commit 977a7b62 by zhu.zewen

新增云签token失效逻辑

parent 65348f20
...@@ -5,11 +5,13 @@ import cn.hutool.core.codec.Base64Decoder; ...@@ -5,11 +5,13 @@ import cn.hutool.core.codec.Base64Decoder;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.crypto.digest.DigestUtil; import cn.hutool.crypto.digest.DigestUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.jmai.api.exception.ServiceException; import com.jmai.api.exception.ServiceException;
import com.jmai.physic.config.CloudSignProperties; import com.jmai.physic.config.CloudSignProperties;
import com.jmai.physic.entity.CloudSignToken; import com.jmai.physic.entity.CloudSignToken;
import com.jmai.physic.entity.ISignData; import com.jmai.physic.entity.ISignData;
import com.jmai.physic.entity.PhysicWarehouse;
import com.jmai.physic.mapper.CloudSignTokenMapper; import com.jmai.physic.mapper.CloudSignTokenMapper;
import com.jmai.sys.consts.enums.SysFileTypeEnum; import com.jmai.sys.consts.enums.SysFileTypeEnum;
import com.jmai.sys.ctx.SpringContextUtils; import com.jmai.sys.ctx.SpringContextUtils;
...@@ -32,6 +34,7 @@ import javax.annotation.Resource; ...@@ -32,6 +34,7 @@ import javax.annotation.Resource;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import static com.jmai.api.base.BaseService.toJSONString;
import static com.jmai.sys.AbstractService.nextId; import static com.jmai.sys.AbstractService.nextId;
@Slf4j @Slf4j
...@@ -69,20 +72,19 @@ public class CloudsignService { ...@@ -69,20 +72,19 @@ public class CloudsignService {
CloudSignToken token = cloudSignTokenMapper.selectOne( CloudSignToken token = cloudSignTokenMapper.selectOne(
Wrappers.<CloudSignToken>lambdaQuery() Wrappers.<CloudSignToken>lambdaQuery()
.eq(CloudSignToken::getUserId, userId) .eq(CloudSignToken::getUserId, userId)
.eq(CloudSignToken::getStatus, 1) // 只查询有效状态的令牌
.orderByDesc(CloudSignToken::getCreateTime) // 获取最新的令牌 .orderByDesc(CloudSignToken::getCreateTime) // 获取最新的令牌
); );
if (token == null) { if (ObjectUtil.isEmpty(token)
throw new ServiceException("未找到用户的云签令牌,请先登录云签"); || token.isInactive()
|| token.getExpiryTime().isBefore(LocalDateTime.now())
|| ObjectUtil.notEqual(token.getUserId(), userId)) {
if (ObjectUtil.isNotEmpty(token)) {
token.setEncryptedToken("-");
} }
log.info("云签令牌已失效:{}", toJSONString(token));
// 检查令牌是否过期 cleanCloudSignToken(token.getUserId(), token.getWorkNo());
if (token.getExpiryTime().isBefore(LocalDateTime.now())) { throw new ServiceException("云签令牌已失效,请重新登录");
// 更新令牌状态为失效
token.setStatus(0);
cloudSignTokenMapper.updateById(token);
throw new ServiceException("云签令牌已过期,请重新登录");
} }
return token.getEncryptedToken(); return token.getEncryptedToken();
...@@ -584,15 +586,34 @@ public class CloudsignService { ...@@ -584,15 +586,34 @@ public class CloudsignService {
cloudSignToken.setStatus(1); // 设置为有效状态 cloudSignToken.setStatus(1); // 设置为有效状态
// 先尝试删除旧的令牌记录(如果有) // 先尝试删除旧的令牌记录(如果有)
cloudSignTokenMapper.update(null, Wrappers.lambdaUpdate(CloudSignToken.class) cleanCloudSignToken(user.getUserId(), user.getWorkNo());
.eq(CloudSignToken::getWorkNo, user.getWorkNo())
.set(CloudSignToken::getUpdateBy, SpringContextUtils.getUserId())
.set(CloudSignToken::getUpdateTime, LocalDateTime.now())
.set(CloudSignToken::getDelFlag, 1)
.setSql("work_no ='" + user.getWorkNo() + ":" + nextId() + "'")
);
// 插入新的令牌记录 // 插入新的令牌记录
cloudSignTokenMapper.insert(cloudSignToken); cloudSignTokenMapper.insert(cloudSignToken);
} }
/**
* 清空云签令牌(二者其一)
*
* @param userId
* @param workNo
*/
public void cleanCloudSignToken(Long userId, String workNo) {
if (ObjectUtil.isAllEmpty(userId, workNo)) {
return;
}
LambdaUpdateWrapper<CloudSignToken> wrapper = Wrappers.lambdaUpdate(CloudSignToken.class);
if (ObjectUtil.isAllNotEmpty(userId, workNo)) {
wrapper.and(w -> w
.eq(CloudSignToken::getUserId, userId)
.or().eq(CloudSignToken::getWorkNo, workNo)
);
}
wrapper.set(CloudSignToken::getUpdateBy, SpringContextUtils.getUserId())
.set(CloudSignToken::getUpdateTime, LocalDateTime.now())
.set(CloudSignToken::getDelFlag, 1)
.setSql("work_no ='" + workNo + ":" + nextId() + "'");
cloudSignTokenMapper.update(null, wrapper);
}
} }
package com.jmai.physic.entity; package com.jmai.physic.entity;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.jmai.api.base.IStatus;
import com.jmai.sys.entity.BaseVersionEntity; import com.jmai.sys.entity.BaseVersionEntity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
...@@ -14,7 +15,7 @@ import java.time.LocalDateTime; ...@@ -14,7 +15,7 @@ import java.time.LocalDateTime;
@Data @Data
@ApiModel(description = "云签令牌信息") @ApiModel(description = "云签令牌信息")
@TableName("cloud_sign_token") @TableName("cloud_sign_token")
public class CloudSignToken extends BaseVersionEntity { public class CloudSignToken extends BaseVersionEntity implements IStatus {
@ApiModelProperty(value = "用户ID") @ApiModelProperty(value = "用户ID")
private Long userId; private Long userId;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment