특수 문자 오류 해결하기: Invalid character found in the request target

2024. 4. 3. 10:41·삽질 로그
목차
  1. 문제 발생 상황
  2. 해결 방안
  3. 마치며

안녕하세요.

최근 개발 중 java.lang.IllegalArgumentException: Invalid character found in the request target 오류에 직면했습니다.

해당오류는 클라이언트의 요청 URL에 특수 문자가 포함되어 있을 때 발생하는 문제로, RFC 7230 및 RFC 3986 규정에 어긋나는 문자들 때문이라고 합니다.

그래서 이번 글에서는 이 문제의 해결 과정을 공유하고자 합니다.

문제 발생 상황

Error 발생

Spring Boot에서 클라이언트로부터 특정 특수 문자를 포함한 요청을 받았을 때, java.lang.IllegalArgumentException 오류가 발생했습니다. 처음에는 application.yml 설정을 통해 요청 인코딩을 UTF-8로 강제하는 방식으로 해결하려 시도했습니다.

server:
  servlet:
    encoding:
      charset: UTF-8
      enabled: true
      force: true

하지만, 이 방법은 문제를 해결하지 못했습니다. 오류 메시지를 보니 문제의 원인은 URL에 포함된 특수 문자가 웹 서버(Tomcat)의 기본 설정과 충돌하는 것으로 밝혀졌습니다.

해결 방안

문제를 해결하기 위해, Tomcat의 relaxedQueryChars 옵션을 커스터마이징하는 방법을 선택했습니다. 이 옵션을 사용하면 특정 특수 문자를 쿼리 파라미터로 허용할 수 있습니다. 아래는 TomcatServletWebServerFactory를 커스터마이징하여 relaxedQueryChars를 설정하는 Java 구성 클래스의 예시입니다.

@Configuration
public class TomcatWebCustomConfig implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {

    @Override
    public void customize(TomcatServletWebServerFactory factory) {
        factory.addConnectorCustomizers(connector -> connector.setProperty("relaxedQueryChars", "<>[\\]^`{|}"));
    }
}

이 설정을 통해, \, <, >, [, ], ^, `, {, |, }와같은 문자들을 URL 쿼리 파라미터에서 안전하게 사용할 수 있게 되었습니다.

마치며

사실 처음엔 별거 아닌 줄 알았는데... 애들이 생각보다 까다롭더라고요.
괜히 에러가 나는 게 아니구나 싶었고, 결국 하나하나 뜯어보면서 URL 쿼리 파라미터랑 인코딩에 대해 꽤 많이 배우게 됐습니다.
“아 이런 것도 신경 써야 하는구나” 싶은 순간들이었고요.
개발하면서 예상 못한 데서 막히는 일이 종종 있는데, 이럴 때마다 좀 더 단단해지는 것 같습니다.

'삽질 로그' 카테고리의 다른 글

Spring Boot에서 SSL 인증서 설정하기(localhost에서 https를!)  (0) 2024.04.22
WebConfig로 해결한 문자 인코딩의 미스터리  (2) 2024.04.18
  1. 문제 발생 상황
  2. 해결 방안
  3. 마치며
'삽질 로그' 카테고리의 다른 글
  • Spring Boot에서 SSL 인증서 설정하기(localhost에서 https를!)
  • WebConfig로 해결한 문자 인코딩의 미스터리
악덕
악덕
우당탕탕 개발 블로그
  • 악덕
    버그와 함께 춤을
    악덕
  • 전체
    오늘
    어제
    • 전체 (26) N
      • TIL (2) N
      • 개발 노트 (19) N
        • Java (5)
        • JavaScript (1)
        • Spring (4)
        • Linux (1)
        • DevOps (1) N
        • etc. (7)
      • 문제 풀이 (0)
      • 삽질 로그 (3)
      • 기타 (2)
  • 링크

    • GitHub
    • Project.zip
    • 밀로(millo)
  • 태그

    solid 원칙
    springboot
    객체지향 프로그래밍
    DevOps
    컨테이너
    java
    java persistence api
    Til
    OOP
    ssl
    gdg
    프로그래밍
    웹개발
    JPA
    Docker
    Spring Data JPA
    자료형
    자바기초
    mysql
    프로그래밍언어
  • hELLO· Designed By정상우.v4.10.3
악덕
특수 문자 오류 해결하기: Invalid character found in the request target
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.