在大并发的项目中,例如抢票系统、秒杀系统中,常常会遇到一次处理很多个请求,当服务器压力过大时,就会对用户的体验产生影响。在这里可以写一个限制一定时间内接口访问数量的注解,方便又高效;
@Retention(RUNTIME)
@Target(METHOD)
public @interface AccessLimit {
/**
* 限制时间
*/
int seconds();
/**
* 最大访问数
*/
int maxCount();
/**
* 是否需要登录
*/
boolean needLogin() default true;
}
@Service
public class AccessInterceptor extends HandlerInterceptorAdapter{
@Autowired
MiaoshaUserService userService;
@Autowired
RedisService redisService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
if(handler instanceof HandlerMethod) {
AccessLimit accessLimit = hm.getMethodAnnotation(AccessLimit.class);
if(accessLimit == null) {
return true;
}
int seconds = accessLimit.seconds();
int maxCount = accessLimit.maxCount();
boolean needLogin = accessLimit.needLogin();
//筛选逻辑
}
return true;
}
}
@AccessLimit(seconds=5, maxCount=5, needLogin=true)
@RequestMapping(value="/path", method=RequestMethod.GET)
@ResponseBody
public Result<String> test() {
}
发表时间:2020-04-26
本站文章除注明转载/出处外,皆为作者原创,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。