Explorar o código

限流维度改为appkey+api

dsx %!s(int64=2) %!d(string=hai) anos
pai
achega
d5bcf9b897

+ 6 - 5
src/main/java/com/fdkankan/openApi/aop/RedisLimitAspect.java

@@ -34,7 +34,7 @@ import java.util.concurrent.TimeUnit;
 @Configuration
 public class RedisLimitAspect {
 
-    private final static String REDIS_LIMIT_KEY_PREFIX = "openapi:limit:";
+    private final static String REDIS_LIMIT_KEY_PREFIX = "openapi:limit:key:resource:%s:%s";
 
     @Autowired
     private RedisTemplate redisTemplate;
@@ -46,7 +46,8 @@ public class RedisLimitAspect {
         MethodSignature methodSignature = (MethodSignature)joinPoint.getSignature();
         Method method = methodSignature.getMethod();
         RedisLimit redisLimit = method.getAnnotation(RedisLimit.class);
-        LimitType limitType = redisLimit.limitType();
+        LimitType limitType = redisLimit.limitType();//限流方式
+        String resource = redisLimit.name();//资源名
 
         ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
         HttpServletRequest request = requestAttributes.getRequest();
@@ -70,14 +71,14 @@ public class RedisLimitAspect {
             default:
                 key = StringUtils.upperCase(method.getName());
         }
-        boolean limited = this.shouldLimited(key, limitCount, period, timeUnit);
+        boolean limited = this.shouldLimited(key, resource, limitCount, period, timeUnit);
         if(limited){
             throw new BusinessException(ErrorCode.SYSTEM_BUSY);
         }
     }
 
-    private boolean shouldLimited(String key, long max, long timeout, TimeUnit timeUnit) {
-        key = REDIS_LIMIT_KEY_PREFIX + key;
+    private boolean shouldLimited(String key, String resource, long max, long timeout, TimeUnit timeUnit) {
+        key = String.format(REDIS_LIMIT_KEY_PREFIX, key, resource);
         // 统一使用单位毫秒
         long ttl = timeUnit.toMillis(timeout);
         // 当前时间毫秒数

+ 6 - 6
src/main/java/com/fdkankan/openApi/controller/www/SceneController.java

@@ -45,7 +45,7 @@ public class SceneController extends BaseController {
      */
     @SaIgnore
     @GetMapping("/test")
-    @RedisLimit(limitCount = 1, period = 1)
+    @RedisLimit(name = "scene/test", limitCount = 1, period = 30)
     @ValidateApi(method = "scene:test")
 //    @ValidateApi(method = "scene:getSceneList")
     public  ResultData test() throws InterruptedException {
@@ -58,7 +58,7 @@ public class SceneController extends BaseController {
      */
     @SaIgnore
     @PostMapping("/getSceneList")
-    @RedisLimit(limitCount = 1, period = 1)
+    @RedisLimit(name = "scene/getSceneList", limitCount = 1, period = 1)
     @ValidateApi(method = "scene:getSceneList")
     public ResultData getScenesByUsername(@RequestBody PageScenesParamVo param) {
         PageInfo pageInfo = scenePlusService.getScenesByUserId(this.getUserId(),param);
@@ -71,7 +71,7 @@ public class SceneController extends BaseController {
      */
     @SaIgnore
     @PostMapping("/getScenePointInfo")
-    @RedisLimit(limitCount = 1, period = 1)
+    @RedisLimit(name="scene/getScenePointInfo", limitCount = 1, period = 1)
     @ValidateApi(method = "scene:getScenePointInfo")
     public ResultData getScenePointInfo(@RequestBody @Validated BaseSceneParamVo param) {
         return sceneService.getScenePointInfo(this.getUserId(), param);
@@ -83,7 +83,7 @@ public class SceneController extends BaseController {
      */
     @SaIgnore
     @PostMapping("/getSceneObj")
-    @RedisLimit(limitCount = 1, period = 1)
+    @RedisLimit(name = "scene/getSceneObj", limitCount = 1, period = 1)
     @ValidateApi(method = "scene:getSceneObj")
     public ResultData getSceneObjFiles(@RequestBody @Validated BaseSceneParamVo param) {
         return sceneService.getSceneObjFiles(this.getUserId(), param);
@@ -95,7 +95,7 @@ public class SceneController extends BaseController {
      */
     @SaIgnore
     @PostMapping("/getScenePanorama")
-    @RedisLimit(limitCount = 1, period = 1)
+    @RedisLimit(name = "scene/getScenePanorama", limitCount = 1, period = 1)
     @ValidateApi(method = "scene:getScenePanorama")
     public ResultData getScenePanorama(@RequestBody @Validated BaseSceneParamVo param) {
         return sceneService.getScenePanorama(this.getUserId(), param);
@@ -107,7 +107,7 @@ public class SceneController extends BaseController {
      */
     @SaIgnore
     @PostMapping("/getSceneViewUserFile")
-    @RedisLimit(limitCount = 1, period = 30)
+    @RedisLimit(name = "scene/getSceneViewUserFile", limitCount = 1, period = 30)
     @ValidateApi(method = "scene:getSceneViewUserFile")
     public ResultData getSceneViewUserFile(@RequestBody @Validated BaseSceneParamVo param) {
         return ResultData.ok(scenePlusService.getSceneViewUserFile(param.getSceneCode(), this.getUserId()));

+ 1 - 1
src/main/java/com/fdkankan/openApi/util/TokenUtil.java

@@ -21,7 +21,7 @@ public class TokenUtil {
    public static String createToken(){
       String token=  IdUtil.getSnowflake().nextIdStr();
       String Authorization = Base64.encode((token).getBytes());
-      return Authorization;
+      return Authorization.replaceAll("=","");
    }
    public static String decodeToken(String authorization){
       return  Base64.decodeStr(authorization);