본문 바로가기

Server

Tomcat 에서 webapp이 선언한 web.xml에 기술된 error-code 400에 대한 처리를 무시할 때 해결 방법

Tomcat 9+ 버전 사용중에 처음보는 상황을 겪었다.
호기심에 parameter에 json 타입을 넣어서 get방식으로 던지고이를 받아서 처리하게끔 해보려고 했다.

{
    key:value, key:[value0,value1,value2…]
}

Tomcat 에서 아래와 같은 에러를 일으켰다. 

java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986



처음보는 에러였고, 이에 대해서 찾아보니 RFC7230 기술되어 있는 허용되지않은 기호 사용 시에 Tomcat에서 URI 파싱부터 이를 차단하여 Webapp에  web.xml에 기술한 에러페이지 분기 및 프레임워크 내에 기술한 Advice, Filter등에서도 이를 잡아내지 못하였다.

여러가지 방식으로 접근해봤지만 Tomcat에서 이를 기본적으로 불허한 것이기에 이를 허용하는 방법을 찾기로 했다.

방법은  server.xml에서 http connector에서 허용할 특수문자를 기입하여 허용하도록 열어주었다.
이것이 정상적인 처리인가에 대한 의문이 들긴한다.



400에러가 나긴 나야하는 건데... 단순이 특수문자 자체를 URI의 문자열로 인식하여 정의되지 않은 URI를 찾고 있다는 식으로 404로 포워딩 된다. 

그리고 서비스되는 URI에 접근했을 떄 이러한 특수문자의 사용이 위배됨을 표현하기 위한 또다른 parser를 구현해야한다. 
Tomcat에서 하는 처리보다는 더 보기좋게 만들어 낼 수 있어 이 방법이 web application에서 처리하기가 더 수월해 진다.

이제는 web.xml에서 정의하던 ControllerAdvice로 정의하던 Filter 로 잡아내던 하면 된다.


'Server' 카테고리의 다른 글

카프카 학습 시작  (0) 2019.01.17