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.
75 lines
2.9 KiB
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;
|
|
}
|
|
}
|
|
} |