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

2024. 4. 3. 10:41·삽질 로그

안녕하세요.

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

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

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

티스토리툴바