반응형
https://myhappyman.tistory.com/244
이전에도 replaceFirst를 사용하여 문서를 읽으면서 차례대로 치환처리를 해주는 서비스를 개발했었는데, 관련하여 최근에 또 이슈가 발생하였다.
java.lang.IllegalArgumentException: Illegal group reference 해당 오류가 발생하고 있었는데, 로그부분의 관련된 서비스 로직부분을 보니 이번에도 replace부분이였다.
프론트에서 입력한 파라미터값을 가져와서 html을 만드는 서비스였는데, 특정 위치에 치환을 위해 replaceFirst부분을 사용하였고, 입력한 파라미터값에 '$', '\' 값이 존재하면 해당 오류가 발생하고 있었다.
자바 정규식에 특수문자 몇 키워드는 특별한 동작을 하도록 설계가 되어있어서 해당 현상이 발생한다.
이외에도 '+', '*', '?', '^' 등의 키워드가 정규식내에서 특정 키워드로 동작을 하는데, 이런 동작을 하지 않도록 처리할 수 있다.
java.util.regex.Matcher.quoteReplacement 메소드를 사용하면 되는데, 기존에 파라미터 처리하던 부분을 아래와 같이 수정하여 해결하였다.
기존 문제 발생
reportForm = reportForm.replaceFirst("[$]user_name", param.get("user_name"))
수정 후
reportForm = reportForm.replaceFirst(
"[$]user_name",
java.util.regex.Matcher.quoteReplacement(param.get("user_name"))
)
반응형
'JAVA' 카테고리의 다른 글
JAVA - 자바 URL 요청으로 화면 저장하기(캡처) (2) | 2022.07.07 |
---|---|
Java - Try With Resources 자원 해제하기 (0) | 2022.07.01 |
JAVA - Math.random() 난수 처리 취약점 : SecureRandom() (0) | 2021.10.07 |
JAVA - replaceFirst 치환시 주의점(특수문자 문자열 치환) (0) | 2021.08.12 |
JAVA - zip파일 내부 파일 리스트 확인하기 (0) | 2021.06.22 |