From a2bf43d3350b560a63ff2fe1c07f45e6c0eef796 Mon Sep 17 00:00:00 2001 From: Gyubin-Han Date: Tue, 1 Jul 2025 17:54:46 +0900 Subject: [PATCH] =?UTF-8?q?Fix:=20=EC=9B=90=EB=B3=B8=20URL=EC=97=90=20Prot?= =?UTF-8?q?ocol=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 생성 메소드 (검증 및 생성)