RateLimit.java 829 B

12345678910111213141516171819202122232425262728293031323334
  1. package com.tzld.piaoquan.api.annotation;
  2. import java.lang.annotation.ElementType;
  3. import java.lang.annotation.Retention;
  4. import java.lang.annotation.RetentionPolicy;
  5. import java.lang.annotation.Target;
  6. /**
  7. * 限流注解,支持按 IP 或按账号维度
  8. */
  9. @Target(ElementType.METHOD)
  10. @Retention(RetentionPolicy.RUNTIME)
  11. public @interface RateLimit {
  12. /**
  13. * 限流时间窗口,单位秒
  14. */
  15. long timeWindow() default 60;
  16. /**
  17. * 时间窗口内最大请求数
  18. */
  19. long maxRequests() default 10;
  20. /**
  21. * 限流提示信息
  22. */
  23. String message() default "请求过于频繁,请稍后再试";
  24. /**
  25. * 是否按账号限流(需要登录态),true 时以 accountId 为限流键,false 时以 IP 为限流键
  26. */
  27. boolean limitByAccount() default false;
  28. }