From 8b4918a941cb3635de42daf00b2347ba1f66f1ff Mon Sep 17 00:00:00 2001 From: nayonsoso Date: Fri, 25 Oct 2024 08:59:27 +0900 Subject: [PATCH 1/6] =?UTF-8?q?refactor:=20X-FORWARDED-FOR=20=ED=97=A4?= =?UTF-8?q?=EB=8D=94=20=EC=B6=94=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/requestlimit/RequestLimitInterceptor.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/backend/src/main/java/reviewme/config/requestlimit/RequestLimitInterceptor.java b/backend/src/main/java/reviewme/config/requestlimit/RequestLimitInterceptor.java index ef25b711e..abd1e6d78 100644 --- a/backend/src/main/java/reviewme/config/requestlimit/RequestLimitInterceptor.java +++ b/backend/src/main/java/reviewme/config/requestlimit/RequestLimitInterceptor.java @@ -17,6 +17,8 @@ @RequiredArgsConstructor public class RequestLimitInterceptor implements HandlerInterceptor { + private static final String X_FORWARDED_FOR = "X-FORWARDED-FOR"; + private final RedisTemplate redisTemplate; private final RequestLimitProperties requestLimitProperties; @@ -40,9 +42,9 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons private String generateRequestKey(HttpServletRequest request) { String requestURI = request.getRequestURI(); - String remoteAddr = request.getRemoteAddr(); + String forwardedIp = request.getHeader(X_FORWARDED_FOR); String userAgent = request.getHeader(USER_AGENT); - return String.format("RequestURI: %s, RemoteAddr: %s, UserAgent: %s", requestURI, remoteAddr, userAgent); + return String.format("RequestURI: %s, IP: %s, UserAgent: %s", requestURI, forwardedIp, userAgent); } } From b98dbcce0ecd4fffb52ed4c32ab964f7d83d296a Mon Sep 17 00:00:00 2001 From: nayonsoso Date: Fri, 25 Oct 2024 09:07:48 +0900 Subject: [PATCH 2/6] =?UTF-8?q?refactor:=20=ED=94=84=EB=A1=9D=EC=8B=9C?= =?UTF-8?q?=EC=9D=98=20=EC=A2=85=EB=A5=98=EC=97=90=20=EC=A2=85=EC=86=8D?= =?UTF-8?q?=EC=A0=81=EC=9D=B4=EC=A7=80=20=EC=95=8A=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=ED=97=A4=EB=8D=94=20=EC=A2=85=EB=A5=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../requestlimit/RequestLimitInterceptor.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/backend/src/main/java/reviewme/config/requestlimit/RequestLimitInterceptor.java b/backend/src/main/java/reviewme/config/requestlimit/RequestLimitInterceptor.java index abd1e6d78..58282eb16 100644 --- a/backend/src/main/java/reviewme/config/requestlimit/RequestLimitInterceptor.java +++ b/backend/src/main/java/reviewme/config/requestlimit/RequestLimitInterceptor.java @@ -18,6 +18,7 @@ public class RequestLimitInterceptor implements HandlerInterceptor { private static final String X_FORWARDED_FOR = "X-FORWARDED-FOR"; + private static final String X_REAL_IP = "X-REAL-IP"; private final RedisTemplate redisTemplate; private final RequestLimitProperties requestLimitProperties; @@ -42,9 +43,18 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons private String generateRequestKey(HttpServletRequest request) { String requestURI = request.getRequestURI(); - String forwardedIp = request.getHeader(X_FORWARDED_FOR); String userAgent = request.getHeader(USER_AGENT); + String ip = extractIp(request); - return String.format("RequestURI: %s, IP: %s, UserAgent: %s", requestURI, forwardedIp, userAgent); + return String.format("RequestURI: %s, IP: %s, UserAgent: %s", requestURI, ip, userAgent); + } + + private String extractIp(HttpServletRequest request) { + String xForwardedForIP = request.getHeader(X_FORWARDED_FOR); + String xRealIp = request.getHeader(X_REAL_IP); + if (xForwardedForIP == null) { + return xRealIp; + } + return xForwardedForIP; } } From 209f5b4cefe4db07be521b6031b91b3022a2a071 Mon Sep 17 00:00:00 2001 From: nayonsoso Date: Fri, 25 Oct 2024 09:13:10 +0900 Subject: [PATCH 3/6] =?UTF-8?q?refactor:=20=ED=94=84=EB=A1=9D=EC=8B=9C?= =?UTF-8?q?=EB=A5=BC=20=EC=82=AC=EC=9A=A9=ED=95=98=EC=A7=80=20=EC=95=8A?= =?UTF-8?q?=EB=8A=94=20=EA=B2=BD=EC=9A=B0=EB=8F=84=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../requestlimit/RequestLimitInterceptor.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/backend/src/main/java/reviewme/config/requestlimit/RequestLimitInterceptor.java b/backend/src/main/java/reviewme/config/requestlimit/RequestLimitInterceptor.java index 58282eb16..421619db9 100644 --- a/backend/src/main/java/reviewme/config/requestlimit/RequestLimitInterceptor.java +++ b/backend/src/main/java/reviewme/config/requestlimit/RequestLimitInterceptor.java @@ -4,6 +4,8 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; +import java.util.Objects; +import java.util.stream.Stream; import lombok.RequiredArgsConstructor; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.data.redis.core.RedisTemplate; @@ -17,8 +19,7 @@ @RequiredArgsConstructor public class RequestLimitInterceptor implements HandlerInterceptor { - private static final String X_FORWARDED_FOR = "X-FORWARDED-FOR"; - private static final String X_REAL_IP = "X-REAL-IP"; + private static final Stream PROXY_HEADERS = Stream.of("X-FORWARDED-FOR", "X-REAL-IP"); private final RedisTemplate redisTemplate; private final RequestLimitProperties requestLimitProperties; @@ -44,17 +45,15 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons private String generateRequestKey(HttpServletRequest request) { String requestURI = request.getRequestURI(); String userAgent = request.getHeader(USER_AGENT); - String ip = extractIp(request); + String ip = extractIpAddress(request); return String.format("RequestURI: %s, IP: %s, UserAgent: %s", requestURI, ip, userAgent); } - private String extractIp(HttpServletRequest request) { - String xForwardedForIP = request.getHeader(X_FORWARDED_FOR); - String xRealIp = request.getHeader(X_REAL_IP); - if (xForwardedForIP == null) { - return xRealIp; - } - return xForwardedForIP; + private String extractIpAddress(HttpServletRequest request) { + return PROXY_HEADERS.map(request::getHeader) + .filter(Objects::nonNull) + .findFirst() + .orElse(request.getRemoteAddr()); } } From 4e694a6379b24fe39d79d48cf66b1f558f853173 Mon Sep 17 00:00:00 2001 From: nayonsoso Date: Fri, 25 Oct 2024 09:19:06 +0900 Subject: [PATCH 4/6] =?UTF-8?q?refactor:=20private=20=ED=95=A8=EC=88=98=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=ED=95=98=EC=A7=80=20=EC=95=8A=EB=8F=84?= =?UTF-8?q?=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/requestlimit/RequestLimitInterceptor.java | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/backend/src/main/java/reviewme/config/requestlimit/RequestLimitInterceptor.java b/backend/src/main/java/reviewme/config/requestlimit/RequestLimitInterceptor.java index 421619db9..05f3cc55b 100644 --- a/backend/src/main/java/reviewme/config/requestlimit/RequestLimitInterceptor.java +++ b/backend/src/main/java/reviewme/config/requestlimit/RequestLimitInterceptor.java @@ -45,15 +45,11 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons private String generateRequestKey(HttpServletRequest request) { String requestURI = request.getRequestURI(); String userAgent = request.getHeader(USER_AGENT); - String ip = extractIpAddress(request); - - return String.format("RequestURI: %s, IP: %s, UserAgent: %s", requestURI, ip, userAgent); - } - - private String extractIpAddress(HttpServletRequest request) { - return PROXY_HEADERS.map(request::getHeader) + String ip = PROXY_HEADERS.map(request::getHeader) .filter(Objects::nonNull) .findFirst() .orElse(request.getRemoteAddr()); + + return String.format("RequestURI: %s, IP: %s, UserAgent: %s", requestURI, ip, userAgent); } } From 18e01f3ecdef7c9d43e85dbb4b8beaf0fcad16b1 Mon Sep 17 00:00:00 2001 From: nayonsoso Date: Fri, 25 Oct 2024 09:24:56 +0900 Subject: [PATCH 5/6] =?UTF-8?q?fix:=20=EA=B9=A8=EC=A7=80=EB=8A=94=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EB=B4=89=ED=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - stream -> list - 테스트에 사용되는 로그 메세지 수정 --- .../config/requestlimit/RequestLimitInterceptor.java | 7 ++++--- .../config/requestlimit/RequestLimitInterceptorTest.java | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/backend/src/main/java/reviewme/config/requestlimit/RequestLimitInterceptor.java b/backend/src/main/java/reviewme/config/requestlimit/RequestLimitInterceptor.java index 05f3cc55b..c01714c1f 100644 --- a/backend/src/main/java/reviewme/config/requestlimit/RequestLimitInterceptor.java +++ b/backend/src/main/java/reviewme/config/requestlimit/RequestLimitInterceptor.java @@ -4,8 +4,8 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; +import java.util.List; import java.util.Objects; -import java.util.stream.Stream; import lombok.RequiredArgsConstructor; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.data.redis.core.RedisTemplate; @@ -19,7 +19,7 @@ @RequiredArgsConstructor public class RequestLimitInterceptor implements HandlerInterceptor { - private static final Stream PROXY_HEADERS = Stream.of("X-FORWARDED-FOR", "X-REAL-IP"); + private static final List PROXY_HEADERS = List.of("X-FORWARDED-FOR", "X-REAL-IP"); private final RedisTemplate redisTemplate; private final RequestLimitProperties requestLimitProperties; @@ -45,7 +45,8 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons private String generateRequestKey(HttpServletRequest request) { String requestURI = request.getRequestURI(); String userAgent = request.getHeader(USER_AGENT); - String ip = PROXY_HEADERS.map(request::getHeader) + String ip = PROXY_HEADERS.stream() + .map(request::getHeader) .filter(Objects::nonNull) .findFirst() .orElse(request.getRemoteAddr()); diff --git a/backend/src/test/java/reviewme/config/requestlimit/RequestLimitInterceptorTest.java b/backend/src/test/java/reviewme/config/requestlimit/RequestLimitInterceptorTest.java index 969040683..db7e72915 100644 --- a/backend/src/test/java/reviewme/config/requestlimit/RequestLimitInterceptorTest.java +++ b/backend/src/test/java/reviewme/config/requestlimit/RequestLimitInterceptorTest.java @@ -22,7 +22,7 @@ class RequestLimitInterceptorTest { private final ValueOperations valueOperations = mock(ValueOperations.class); private final RequestLimitProperties requestLimitProperties = mock(RequestLimitProperties.class); private final RequestLimitInterceptor interceptor = new RequestLimitInterceptor(redisTemplate, requestLimitProperties); - private final String requestKey = "RequestURI: /api/v2/reviews, RemoteAddr: localhost, UserAgent: Postman"; + private final String requestKey = "RequestURI: /api/v2/reviews, IP: localhost, UserAgent: Postman"; @BeforeEach void setUp() { From bb859c8b189b50ae6fd48ca138f3a858bcaa3212 Mon Sep 17 00:00:00 2001 From: nayonsoso Date: Mon, 28 Oct 2024 16:50:57 +0900 Subject: [PATCH 6/6] =?UTF-8?q?refactor:=20redis=20=EC=9D=98=20key=20?= =?UTF-8?q?=EA=B0=92=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - userAgent 는 포함하지 않도록 --- .../config/requestlimit/RequestLimitInterceptor.java | 7 ++----- .../config/requestlimit/RequestLimitInterceptorTest.java | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/backend/src/main/java/reviewme/config/requestlimit/RequestLimitInterceptor.java b/backend/src/main/java/reviewme/config/requestlimit/RequestLimitInterceptor.java index c01714c1f..8c2e10fe7 100644 --- a/backend/src/main/java/reviewme/config/requestlimit/RequestLimitInterceptor.java +++ b/backend/src/main/java/reviewme/config/requestlimit/RequestLimitInterceptor.java @@ -1,7 +1,5 @@ package reviewme.config.requestlimit; -import static org.springframework.http.HttpHeaders.USER_AGENT; - import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.util.List; @@ -44,13 +42,12 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons private String generateRequestKey(HttpServletRequest request) { String requestURI = request.getRequestURI(); - String userAgent = request.getHeader(USER_AGENT); - String ip = PROXY_HEADERS.stream() + String remoteAddress = PROXY_HEADERS.stream() .map(request::getHeader) .filter(Objects::nonNull) .findFirst() .orElse(request.getRemoteAddr()); - return String.format("RequestURI: %s, IP: %s, UserAgent: %s", requestURI, ip, userAgent); + return String.format("RequestURI: %s, RemoteAddress: %s", requestURI, remoteAddress); } } diff --git a/backend/src/test/java/reviewme/config/requestlimit/RequestLimitInterceptorTest.java b/backend/src/test/java/reviewme/config/requestlimit/RequestLimitInterceptorTest.java index db7e72915..ec6b6e522 100644 --- a/backend/src/test/java/reviewme/config/requestlimit/RequestLimitInterceptorTest.java +++ b/backend/src/test/java/reviewme/config/requestlimit/RequestLimitInterceptorTest.java @@ -22,7 +22,7 @@ class RequestLimitInterceptorTest { private final ValueOperations valueOperations = mock(ValueOperations.class); private final RequestLimitProperties requestLimitProperties = mock(RequestLimitProperties.class); private final RequestLimitInterceptor interceptor = new RequestLimitInterceptor(redisTemplate, requestLimitProperties); - private final String requestKey = "RequestURI: /api/v2/reviews, IP: localhost, UserAgent: Postman"; + private final String requestKey = "RequestURI: /api/v2/reviews, RemoteAddress: localhost"; @BeforeEach void setUp() {