通过自定义注解形式实现接口访问评论限制
1.自定义注解,访问限制值和时间放在注解的参数中
RequestLimit.java注解
@Retention(RetentionPolicy.RUNTIME)
public @interface RequestLimit {
/**
*
* 允许访问的次数,默认值MAX_VALUE
*/
intcount() defaultInteger.MAX_VALUE;
/**
*
* 时间段,单位为毫秒,默认值十分钟
*/
longtime() default600000;
}
2.拦截器主要代码
1.当拦截器获得客户端请求,redis生成根据组合code判断是否存在,
如果存在,取得计数器
a.如果计数器大于最大访问数量,return false;限制其访问
b.如果小于,计数器加1
如果不存在,创建一个带定时的、key为组合code的计数器,数字为1
/**
* 接口的访问频次限制
*@param request
*@return
*/
private booleanvalidateCode(HttpServletRequest request,int maxSize, long timeOut){
Stringcode= request.getParameter("params");
Stringdatakey= "RequestLimit" + "Data"+ code