From ebff7085194ff761ac5907996ecd4029b40a1223 Mon Sep 17 00:00:00 2001 From: Chan Jin Date: Thu, 9 Mar 2023 00:27:52 +0900 Subject: [PATCH] =?UTF-8?q?refactor=20:=20=20rate=20limit=20whitelist=20(?= =?UTF-8?q?=20next=20js=20init=20=EB=8C=80=EC=9D=91=20)=20(#539)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor : RedissonLockAop IllegalMonitorStateException 관련 수정 * feat : acl white list 추가 --- .../config/rateLimit/ThrottlingInterceptor.java | 15 ++++++++++++++- DuDoong-Api/src/main/resources/application.yml | 2 ++ DuDoong-Batch/src/main/resources/application.yml | 1 - .../common/aop/redissonLock/RedissonLockAop.java | 3 ++- 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/DuDoong-Api/src/main/java/band/gosrock/api/config/rateLimit/ThrottlingInterceptor.java b/DuDoong-Api/src/main/java/band/gosrock/api/config/rateLimit/ThrottlingInterceptor.java index 3fe79590..632e7b54 100644 --- a/DuDoong-Api/src/main/java/band/gosrock/api/config/rateLimit/ThrottlingInterceptor.java +++ b/DuDoong-Api/src/main/java/band/gosrock/api/config/rateLimit/ThrottlingInterceptor.java @@ -8,10 +8,12 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.github.bucket4j.Bucket; import java.io.IOException; +import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; import org.springframework.http.MediaType; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; @@ -26,6 +28,9 @@ public class ThrottlingInterceptor implements HandlerInterceptor { private final IPRateLimiter ipRateLimiter; private final ObjectMapper objectMapper; + @Value("${acl.whiteList}") + private List aclWhiteList; + private final SlackThrottleErrorSender slackThrottleErrorSender; @Override @@ -33,10 +38,18 @@ public boolean preHandle( HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException { Long userId = SecurityUtils.getCurrentUserId(); + String remoteAddr = request.getRemoteAddr(); + log.info("remoteAddr : " + remoteAddr); + + // next js ssr 대응 + if (aclWhiteList.contains(remoteAddr)) { + log.info("white List pass" + remoteAddr); + return true; + } + Bucket bucket; if (userId == 0L) { // 익명 유저 ip 기반처리 - String remoteAddr = request.getRemoteAddr(); bucket = ipRateLimiter.resolveBucket(remoteAddr); } else { // 비 익명 유저 유저 아이디 기반 처리 diff --git a/DuDoong-Api/src/main/resources/application.yml b/DuDoong-Api/src/main/resources/application.yml index 0c5115e2..e53da179 100644 --- a/DuDoong-Api/src/main/resources/application.yml +++ b/DuDoong-Api/src/main/resources/application.yml @@ -27,6 +27,8 @@ swagger: throttle: overdraft: ${RATE_LIMIT_OVERDRAFT:60} greedyRefill: ${RATE_LIMIT_REFILL:60} + +acl.whiteList : ${ACL_WHITELIST:127.0.0.1,127.0.0.2} --- spring: config: diff --git a/DuDoong-Batch/src/main/resources/application.yml b/DuDoong-Batch/src/main/resources/application.yml index 5d8a5c46..32a13741 100644 --- a/DuDoong-Batch/src/main/resources/application.yml +++ b/DuDoong-Batch/src/main/resources/application.yml @@ -7,7 +7,6 @@ spring: - common batch.job.names: ${job.name:NONE} - --- spring: config: diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/common/aop/redissonLock/RedissonLockAop.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/common/aop/redissonLock/RedissonLockAop.java index b6207399..714be3e6 100644 --- a/DuDoong-Domain/src/main/java/band/gosrock/domain/common/aop/redissonLock/RedissonLockAop.java +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/common/aop/redissonLock/RedissonLockAop.java @@ -73,7 +73,8 @@ public Object lock(final ProceedingJoinPoint joinPoint) throws Throwable { try { rLock.unlock(); } catch (IllegalMonitorStateException e) { - rLock.forceUnlock(); + log.error(e + baseKey + dynamicKey); + throw e; } } }