From cfb900e4ed27554cf4a3d62882a7cb1adfdfcc04 Mon Sep 17 00:00:00 2001 From: Gyubin-Han Date: Tue, 1 Jul 2025 17:08:45 +0900 Subject: [PATCH 1/3] =?UTF-8?q?Chore:=20MainController=20=EB=82=B4=20?= =?UTF-8?q?=EB=8B=A8=EC=B6=95=20URL=EB=A1=9C=20=EC=A0=91=EC=86=8D=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EB=A9=94=EC=86=8C=EB=93=9C=EC=9D=98=20=EC=A3=BC?= =?UTF-8?q?=EC=84=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/be/gyu/urlShortener/controller/MainController.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/be/gyu/urlShortener/controller/MainController.java b/src/main/java/be/gyu/urlShortener/controller/MainController.java index 21949a3..aa6545b 100644 --- a/src/main/java/be/gyu/urlShortener/controller/MainController.java +++ b/src/main/java/be/gyu/urlShortener/controller/MainController.java @@ -54,6 +54,7 @@ public class MainController { /** * 단축 URL 조회 및 원본 URL로 Re-Direct 처리 메소드 * @param shortUrl 단축 URL + * @param request 사용자의 접속 정보 * @param response Re-Direct 응답 처리를 위한 매개변수 */ @GetMapping("/{shortUrl}") From 23042618f09f04b0ffbdda0d96290a37d97ffaab Mon Sep 17 00:00:00 2001 From: Gyubin-Han Date: Tue, 1 Jul 2025 17:09:29 +0900 Subject: [PATCH 2/3] =?UTF-8?q?Feat:=20Users=20Entity=EC=97=90=20=EB=8C=80?= =?UTF-8?q?=EC=9D=91=ED=95=98=EB=8A=94=20UsersRepository=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../be/gyu/urlShortener/repository/UsersRepository.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/main/java/be/gyu/urlShortener/repository/UsersRepository.java diff --git a/src/main/java/be/gyu/urlShortener/repository/UsersRepository.java b/src/main/java/be/gyu/urlShortener/repository/UsersRepository.java new file mode 100644 index 0000000..d44b4b6 --- /dev/null +++ b/src/main/java/be/gyu/urlShortener/repository/UsersRepository.java @@ -0,0 +1,9 @@ +package be.gyu.urlShortener.repository; + +import org.springframework.data.jpa.repository.JpaRepository; + +import be.gyu.urlShortener.entity.Users; + +public interface UsersRepository extends JpaRepository{ + +} From a2bf43d3350b560a63ff2fe1c07f45e6c0eef796 Mon Sep 17 00:00:00 2001 From: Gyubin-Han Date: Tue, 1 Jul 2025 17:54:46 +0900 Subject: [PATCH 3/3] =?UTF-8?q?Fix:=20=EC=9B=90=EB=B3=B8=20URL=EC=97=90=20?= =?UTF-8?q?Protocol=EC=9D=B4=20=EC=97=86=EC=9D=84=20=EB=95=8C,=20=EB=B9=84?= =?UTF-8?q?=EC=A0=95=EC=83=81=EC=A0=81=EC=9C=BC=EB=A1=9C=20Re-Direct?= =?UTF-8?q?=EB=90=98=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gyu/urlShortener/service/MainService.java | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/main/java/be/gyu/urlShortener/service/MainService.java b/src/main/java/be/gyu/urlShortener/service/MainService.java index 348d11a..2bc2975 100644 --- a/src/main/java/be/gyu/urlShortener/service/MainService.java +++ b/src/main/java/be/gyu/urlShortener/service/MainService.java @@ -13,6 +13,7 @@ import be.gyu.urlShortener.repository.UrlMapRepository; import java.util.HashMap; import java.util.Map; import java.util.Optional; +import java.util.regex.Pattern; import java.time.LocalDateTime; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; @@ -27,13 +28,15 @@ public class MainService { private ClickStatRepository clickStatRepository; // HTTP(S) URL 검증 패턴식 - private final String urlRegPattern="^((http|https):\\/\\/)?([a-z0-9-]{2,}\\.[a-z]{2,}|([0-9]{1,3}\\.){3}[0-9]{1,3})[\\w.\\/가-힣\\-\\ ?=&:%0-9A-Fa-f]*"; + private final Pattern urlPattern=Pattern.compile("^((http|https):\\/\\/)?([a-z0-9-]{2,}\\.[a-z]{2,}|([0-9]{1,3}\\.){3}[0-9]{1,3})[\\w.\\/가-힣\\-\\ ?=&:%0-9A-Fa-f]*"); + // URL 앞에 Protocol 존재 여부 확인 패턴식 + private final Pattern protocolPattern=Pattern.compile("^(http|https):\\/\\/"); // Base62 Encoder Instance 생성 및 호출 private Base62 base62=Base62.createInstance(); // HTTP(S) URL 검증 메소드 public boolean validOriginalUrl(String url){ - return url.matches(urlRegPattern); + return urlPattern.matcher(url).matches(); } // URL 단축 메소드 @@ -108,9 +111,21 @@ public class MainService { .clickStatIpAddr(ipAddr) .build(); + // 접속한 클라이언트의 정보를 DB에 저장 clickStatRepository.save(clickStat); + String originalUrl=clickStat.getUrlMap().getUrlMapOriginal(); - return clickStat.getUrlMap().getUrlMapOriginal(); + // 저장된 원본 URL에 Protocol이 있는지 확인 + // ㄴ 없으면, 원본 URL 값에 http 프로토콜을 추가 + if(!protocolPattern.matcher(originalUrl).find()){ + StringBuilder sb=new StringBuilder(); + sb.append("http://"); + sb.append(originalUrl); + originalUrl=sb.toString(); + } + + // 원본 URL을 반환 + return originalUrl; } // 단축 URL 생성 메소드 (검증 및 생성)