spring boot + redis 接口访问频率限制

迷南。 2023-01-08 02:21 252阅读 0赞
  1. @Component
  2. public class BlackInterceper implements HandlerInterceptor {
  3. @Autowired
  4. private RedisTemplate<String, Object> redisTemplate;
  5. private Logger log = LoggerFactory.getLogger(this.getClass());
  6. @Override
  7. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
  8. throws Exception {
  9. response.setHeader("Content-type", "text/html;charset=UTF-8");
  10. String token = request.getHeader(Cons.TOKEN.WECHAT);
  11. String requestURI = request.getRequestURI();
  12. if (StringUtils.isBlank(token)) {
  13. response.setHeader("Content-type", "text/html;charset=UTF-8");
  14. response.getWriter().write(JsonUtils.marshalToString(ReturnResult.build(401, "未授权")));
  15. return false;
  16. }
  17. Integer userId = (Integer) redisTemplate.opsForValue().get(Cons.TOKEN.WECHAT + ":" + token);
  18. log.error("userId={},访问了url={},请求ip={}",token,requestURI, IpUtil.getIpAddress(request));
  19. if(redisTemplate.hasKey("black")){
  20. if(redisTemplate.opsForSet().isMember("black", userId)){
  21. response.getWriter().write(JsonUtils.marshalToString(ReturnResult.build(500, "由于存在恶意攻击你已被限制访问")));
  22. return false;
  23. }
  24. }
  25. Integer count = (Integer)redisTemplate.opsForValue().get("limit:"+token);
  26. if(count==null){
  27. redisTemplate.opsForValue().set("limit:"+token, 1, 60, TimeUnit.SECONDS);
  28. return true;
  29. }else{
  30. if(count>100 && count<150){
  31. response.getWriter().write(JsonUtils.marshalToString(ReturnResult.build(500, "请求太频繁,请稍后再试")));
  32. redisTemplate.opsForValue().increment("limit:"+token, 1);
  33. return false;
  34. }else if(count>=150){
  35. redisTemplate.opsForSet().add("black",userId,2,TimeUnit.DAYS);
  36. response.getWriter().write(JsonUtils.marshalToString(ReturnResult.build(500, "请求太频繁,已经被限制访问")));
  37. //redisTemplate.opsForSet().add("black",token);
  38. return false;
  39. }else{
  40. redisTemplate.opsForValue().increment("limit:"+token, 1);
  41. return true;
  42. }
  43. }
  44. }
  45. @Override
  46. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
  47. ModelAndView modelAndView) throws Exception {
  48. // TODO Auto-generated method stub
  49. }
  50. @Override
  51. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
  52. throws Exception {
  53. // TODO Auto-generated method stub
  54. }
  55. }

发表评论

表情:
评论列表 (有 0 条评论,252人围观)

还没有评论,来说两句吧...

相关阅读