houzhongyi
2024-07-11 e7c1260db32209a078a962aaa0ad5492c35774fb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.iailab.framework.ratelimiter.core.keyresolver.impl;
 
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import com.iailab.framework.common.util.servlet.ServletUtils;
import com.iailab.framework.ratelimiter.core.annotation.RateLimiter;
import com.iailab.framework.ratelimiter.core.keyresolver.RateLimiterKeyResolver;
import org.aspectj.lang.JoinPoint;
 
/**
 * IP 级别的限流 Key 解析器,使用方法名 + 方法参数 + IP,组装成一个 Key
 *
 * 为了避免 Key 过长,使用 MD5 进行“压缩”
 *
 * @author iailab
 */
public class ClientIpRateLimiterKeyResolver implements RateLimiterKeyResolver {
 
    @Override
    public String resolver(JoinPoint joinPoint, RateLimiter rateLimiter) {
        String methodName = joinPoint.getSignature().toString();
        String argsStr = StrUtil.join(",", joinPoint.getArgs());
        String clientIp = ServletUtils.getClientIP();
        return SecureUtil.md5(methodName + argsStr + clientIp);
    }
 
}