大佬的代码:看这里
原理:
通过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);}}
}