본문 바로가기
Dev/Spring boot

[spring boot] tomcat 에러 페이지 설정 ( 외장 톰캣을 사용하는 경우 )

by 석맨.class 2024. 11. 18.
반응형

프로젝트 진행중 모의 해킹 테스트때 발생한 이슈이다.

요청 경로나 파라미터에 특수문자 등을 넣어서 요청했을 경우 내가 설정한 예외 처리 가 나와야 한다.

 

예외처리는 spring boot 에서 다음처럼 처리하였다.

@RequiredArgsConstructor
@RestControllerAdvice
public class GlobalExceptionHandler {
...

 

하지만 url 의 파라미터에 특문을 넣고 요청했을때 톰캣의 400 에러 페이지가 응답하면서 서버의 정보가 노출되었다

나는 원인을 파악하기 위해 동일하게 요청을 해보았지만 톰캣 에러페이지가 아닌 validation 예외 처리를 반환한다.

 

로컬에서는 해당 상황이 재현되지 않았고 개발서버, 검수서버 와 같이 배포 했을때 해당문제가 발생했다.

이것때문에 좀 시간이 걸렸다.

 

배포된 서버에서도 브라우저나 postman 으로 요청했을땐 validation 예외를 응답하지만,

문제는 curl 로 요청했을 경우이다.

curl --location 'http://localhost:8080/'

 

게다가 프로젝트는 .war 로 배포되고 있었다.

이럴 경우 spring boot 가 아닌 tomcat 에서 먼저 예외처리를 해버려 서버에 로그도 남지 않았다.

 

코드만 수정해서 해결하고 싶었지만, 결국 아래와 같이 각 에러 페이지를 만들고 server.xml 을 수정해서 해결 하였다.

web.xml 은 어떤 방법을 사용해도 해당 설정이 적용되지 않았다. 아마 빌드할때 새로 만들어 져서 그런게 아닐까 이부분은 나중에 생각하기로...

 

server.xml 에 예외 페이지 의 서버정보 노출 옵션설정 및 커스텀 페이지 지정.

<Host>
    ...
    <Valve className="org.apache.catalina.valves.ErrorReportValve"
        showReport="false" <!-- 기본 톰캣 예외 페이지 서버정보 표시 옵션 -->
        showServerInfo="false" <!-- 기본 톰캣 예외 페이지 서버정보 표시 옵션 -->
        errorCode.400="톰캣예외페이지절대경로/400.html"
        errorCode.401="톰캣예외페이지절대경로/401.html"
        errorCode.403="톰캣예외페이지절대경로/403.html"
        errorCode.404="톰캣예외페이지절대경로/404.html"
        errorCode.500="톰캣예외페이지절대경로/500.html" />
    ...
</Host>

 

이러고 톰캣 restart 하여 curl 날리니 정상적으로 커스텀 페이지를 응답했다.