大佬的代码:看这里
原理:
通过aop切面编程,在调用接口前缓存接口信息,将信息缓存到redis中,在规定时间内重复调用接口,会被拦截请求
有个地方感觉不太合理,在使用中我将其修改了
//前略
public class PreventAop {
public String getToken(){
//该方法仅作参考
return sra.getRequest().getHeader("Authorization");
}
private void defaultHandle(String token, Prevent prevent,String methodFullName) throws Exception {
long expire = Long.parseLong(prevent.value());
//此处改为将token作为凭据,避免不通账号调用同一接口导致请求被拦截
String resp = redisUtil.get(methodFullName+token);
if (StringUtils.isEmpty(resp)) {
redisUtil.set(methodFullName+token, requestStr, expire);
} else {
String message = !StringUtils.isEmpty(prevent.message()) ? prevent.message() :
expire + "秒内不允许重复请求";
throw new BusinessException(message);
}
}
}