添加限流器,未完成状态

This commit is contained in:
仙风道骨小半仙儿 2025-04-18 17:03:26 +08:00
parent 12ab9f178f
commit 96f94b1a18
4 changed files with 42 additions and 10 deletions

View File

@ -52,4 +52,9 @@ public class YudaoRateLimiterConfiguration {
return new ExpressionRateLimiterKeyResolver();
}
@Bean
public GuestRateLimiterKeyResolver guestRateLimiterKeyResolver() {
return new GuestRateLimiterKeyResolver();
}
}

View File

@ -7,6 +7,7 @@ import cn.iocoder.yudao.framework.ratelimiter.core.keyresolver.impl.ClientIpRate
import cn.iocoder.yudao.framework.ratelimiter.core.keyresolver.impl.DefaultRateLimiterKeyResolver;
import cn.iocoder.yudao.framework.ratelimiter.core.keyresolver.impl.ServerNodeRateLimiterKeyResolver;
import cn.iocoder.yudao.framework.ratelimiter.core.keyresolver.impl.UserRateLimiterKeyResolver;
import cn.iocoder.yudao.framework.ratelimiter.core.keyresolver.impl.GuestRateLimiterKeyResolver;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@ -52,6 +53,7 @@ public @interface RateLimiter {
* @see ClientIpRateLimiterKeyResolver 用户 IP 级别
* @see ServerNodeRateLimiterKeyResolver 服务器 Node 级别
* @see ExpressionIdempotentKeyResolver 自定义表达式通过 {@link #keyArg()} 计算
* @see GuestRateLimiterKeyResolver 未付费用户 解析器
*/
Class<? extends RateLimiterKeyResolver> keyResolver() default DefaultRateLimiterKeyResolver.class;
/**

View File

@ -0,0 +1,34 @@
package cn.iocoder.yudao.framework.ratelimiter.core.keyresolver.impl;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import cn.iocoder.yudao.framework.ratelimiter.core.annotation.RateLimiter;
import cn.iocoder.yudao.framework.ratelimiter.core.keyresolver.RateLimiterKeyResolver;
import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
import org.aspectj.lang.JoinPoint;
import java.util.Optional;
/**
* 游客级别的限流 Key 解析器使用方法名 + 方法参数 + userId + 组装成一个 Key
*
* @author 芋道源码
*/
public class GuestRateLimiterKeyResolver implements RateLimiterKeyResolver {
@Override
public String resolver(JoinPoint joinPoint, RateLimiter rateLimiter) {
String methodName = joinPoint.getSignature().toString();
String argsStr = StrUtil.join(",", joinPoint.getArgs());
Long userId = WebFrameworkUtils.getLoginUserId();
Integer userType = WebFrameworkUtils.getLoginUserType();
// 获取客户表crm_custom中deal_status字段的值
// 假设你有一个方法来获取该值
// TODO 查询审核通过的合同信息根据合同结束时间判断是否已付费
// TODO 定时任务检查订单有效期需要在CRM中更新用户的已付费状态deal_status字段
Integer dealStatus = 0;
// Integer dealStatus = getDealStatusFromCrmCustom(userId);
// 获取用户付费状态
return SecureUtil.md5(methodName + argsStr + userId + userType + dealStatus);
}
}