You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
VIPS/src/main/java/egovframework/util/PathMatcherUtil.java

75 lines
2.9 KiB
Java

package egovframework.util;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.AntPathMatcher;
/**
* Utility class for URL pattern matching
*/
@Slf4j
public class PathMatcherUtil {
private static final AntPathMatcher pathMatcher = new AntPathMatcher();
/**
* Check if URL pattern matches the request URI
*
* @param pattern URL pattern
* @param uri Request URI
* @return true if matches, false otherwise
*/
/**
* URL 패턴이 URI와 일치하는지 확인
* 콤마로 구분된 여러 패턴이 전달된 경우 각 패턴을 개별적으로 처리
*
* @param pattern URL 패턴 (콤마로 구분된 여러 패턴일 수 있음)
* @param uri 요청 URI
* @return 일치 여부
*/
public static boolean match(String pattern, String uri) {
if (pattern == null || uri == null) {
return false;
}
// 패턴 전처리 - 앞뒤 공백 제거
String trimmedPattern = pattern.trim();
// 패턴에 콤마가 포함된 경우 (여러 패턴이 하나의 문자열로 전달된 경우)
if (trimmedPattern.contains(",")) {
//log.debug("콤마로 구분된 여러 패턴이 발견되었습니다: [{}]", trimmedPattern);
// 콤마로 패턴을 분리하여 각각 처리
String[] patterns = trimmedPattern.split(",");
for (String singlePattern : patterns) {
String trimmedSinglePattern = singlePattern.trim();
if (!trimmedSinglePattern.isEmpty()) {
// 개별 패턴으로 재귀 호출
if (match(trimmedSinglePattern, uri)) {
return true;
}
}
}
return false;
}
// 단일 패턴 처리
try {
// AntPathMatcher는 패턴에 따라 다르게 동작함
// 1. 정확한 경로 매칭 (/system/user/list.do)
// 2. 경로 변수 매칭 (/system/user/{id}.do)
// 3. 와일드카드 매칭 (/system/user/*.do, /system/user/**/list.do)
boolean isMatch = pathMatcher.match(trimmedPattern, uri);
//log.debug("URL 패턴 매칭 시도: 패턴=[{}], URI=[{}], 결과=[{}]", trimmedPattern, uri, isMatch);
// 매칭되지 않았을 경우 추가 디버깅 정보
if (!isMatch && (trimmedPattern.contains("*") || trimmedPattern.contains("?"))) {
//log.debug("와일드카드 패턴 매칭 실패: 패턴=[{}], URI=[{}]", trimmedPattern, uri);
}
return isMatch;
} catch (Exception e) {
log.error("URL 패턴 매칭 중 오류 발생: 패턴=[{}], URI=[{}], 오류=[{}]", trimmedPattern, uri, e.getMessage(), e);
return false;
}
}
}