로컬에서 SpringBoot로 구동하였을 때에는 이상이 없었는데..


Tomcat에 적용한 이후에 아래와 같은 에러가 발생했다.

 

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


원인을 파악해 보니 URL 에 특수문자가 들어가서 에러난 것이다.

 

레거시 시스템에서 Get방식으로 바로 호출하는 것이 있기에..

 

우리쪽에서 수정을 해야했다.

 

호출하는쪽에서 encodeURI로 전체주소를 감싸서 넘겨줬으면 좋았을 것을...


Tomcat쪽에 직접 설정을 한다면 아래 경로에서 relaxedQueryChars을 추가해주면 된다


/tomcat/conf/server.xml

<Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               relaxedQueryChars="[\\]^`{|}"
               />

위에 설정만 해서는 해결되지 않았다..

부트쪽에 따로 설정을 해주어야하나....

 

결국 아래소스를 추가하여 해결하였다.

@Configuration
public class TomcatWebServerCustomizer
        implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {

    /**
     * 톰캣에 옵션 추가.
     *
     * @param factory
     */
    @Override
    public void customize(TomcatServletWebServerFactory factory) {
        factory.addConnectorCustomizers((TomcatConnectorCustomizer)
                connector -> connector.setAttribute("relaxedQueryChars", "<>[\\]^`{|}"));
    }
}

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기