Pre Merge pull request !171 from 陈晨成/master-jdk17-dev

pull/171/MERGE
陈晨成 2025-03-30 03:10:43 +00:00 committed by Gitee
commit b9cd7c043d
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
2 changed files with 14 additions and 8 deletions

View File

@ -2,10 +2,12 @@ package cn.iocoder.yudao.framework.signature.core.aop;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.BooleanUtil;
import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.DigestUtil; import cn.hutool.crypto.digest.DigestUtil;
import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.common.exception.ServiceException;
import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants;
import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils;
import cn.iocoder.yudao.framework.signature.core.annotation.ApiSignature; import cn.iocoder.yudao.framework.signature.core.annotation.ApiSignature;
import cn.iocoder.yudao.framework.signature.core.redis.ApiSignatureRedisDAO; import cn.iocoder.yudao.framework.signature.core.redis.ApiSignatureRedisDAO;
@ -69,13 +71,17 @@ public class ApiSignatureAspect {
// 3. 将 nonce 记入缓存,防止重复使用(重点二:此处需要将 ttl 设定为允许 timestamp 时间差的值 x 2 // 3. 将 nonce 记入缓存,防止重复使用(重点二:此处需要将 ttl 设定为允许 timestamp 时间差的值 x 2
String nonce = request.getHeader(signature.nonce()); String nonce = request.getHeader(signature.nonce());
signatureRedisDAO.setNonce(appId, nonce, signature.timeout() * 2, signature.timeUnit()); if (BooleanUtil.isFalse(signatureRedisDAO.setNonce(appId, nonce, signature.timeout() * 2, signature.timeUnit()))) {
String timestamp = request.getHeader(signature.timestamp());
log.info("[verifySignature][appId({}) timestamp({}) nonce({}) sign({}) 存在重复请求]", appId, timestamp, nonce, clientSignature);
throw new ServiceException(GlobalErrorCodeConstants.REPEATED_REQUESTS.getCode(), "存在重复请求");
}
return true; return true;
} }
/** /**
* *
* * <p>
* 1. appId * 1. appId
* 2. timestamp 10 * 2. timestamp 10
* 3. nonce 10 访 * 3. nonce 10 访
@ -118,7 +124,7 @@ public class ApiSignatureAspect {
/** /**
* *
* * <p>
* = + + + * = + + +
* *
* @param signature signature * @param signature signature
@ -139,7 +145,7 @@ public class ApiSignatureAspect {
/** /**
* Map * Map
* *
* @param request * @param request
* @param signature * @param signature
* @return signature params * @return signature params
*/ */

View File

@ -17,7 +17,7 @@ public class ApiSignatureRedisDAO {
/** /**
* *
* * <p>
* KEY signature_nonce:%s // 参数为 随机数 * KEY signature_nonce:%s // 参数为 随机数
* VALUE String * VALUE String
* *
@ -26,7 +26,7 @@ public class ApiSignatureRedisDAO {
/** /**
* *
* * <p>
* HASH * HASH
* KEY %s // 参数为 appid * KEY %s // 参数为 appid
* VALUE String * VALUE String
@ -40,8 +40,8 @@ public class ApiSignatureRedisDAO {
return stringRedisTemplate.opsForValue().get(formatNonceKey(appId, nonce)); return stringRedisTemplate.opsForValue().get(formatNonceKey(appId, nonce));
} }
public void setNonce(String appId, String nonce, int time, TimeUnit timeUnit) { public Boolean setNonce(String appId, String nonce, int time, TimeUnit timeUnit) {
stringRedisTemplate.opsForValue().set(formatNonceKey(appId, nonce), "", time, timeUnit); return stringRedisTemplate.opsForValue().setIfAbsent(formatNonceKey(appId, nonce), "", time, timeUnit);
} }
private static String formatNonceKey(String appId, String nonce) { private static String formatNonceKey(String appId, String nonce) {