티스토리 뷰

 

어떠한 등록도 안한 경우 Spring boot에서는 기본적으로 /error를 호출하게 된다. 그 컨트롤러의 정체는 스프링 부트에서 제공하는 BasicErrorController이다. 

 

스프링 부트는 이런 과정을 모두 기본으로 제공한다.
ErrorPage 를 자동으로 등록한다. 이때 /error 라는 경로로 기본 오류 페이지를 설정한다.

new ErrorPage("/error") , 상태코드와 예외를 설정하지 않으면 기본 오류 페이지로 사용된다. 서블릿 밖으로 예외가 발생하거나, response.sendError(...) 가 호출되면 모든 오류는 /error 를 호출하게 된다.

BasicErrorController 라는 스프링 컨트롤러를 자동으로 등록한다. ErrorPage 에서 등록한 /error 를 매핑해서 처리하는 컨트롤러다.

 

개발자가 할 일은 오류 html파일을 룰에 맞춰 경로에 넣어주면 끝이다

 

 

 

4xx의 경우 405,406등 4로 시작하는 모든 오류를 쓸 수 있다.

 

뷰 선택 우선순위

BasicErrorController 의 처리 순서

  1. 뷰템플릿 resources/templates/error/500.html resources/templates/error/5xx.html
  2. 정적리소스(static,public) resources/static/error/400.html
       resources/static/error/404.html

resources/static/error/4xx.html

 

3. 적용 대상이 없을 때 뷰 이름(error)

       resources/templates/error.html

 

 

 

BasicErrorController는 오류정보를 model에 담아 view로 보내준다. 이 값을 이용해서 출력해 줄 수 있다.

 

* timestamp: Fri Feb 05 00:00:00 KST 2021
* status: 400
* error: Bad Request
* exception: org.springframework.validation.BindException * trace:
예외 trace

* message: Validation failed for object='data'. Error count: 1 * errors: Errors(BindingResult)
* path:
클라이언트 요청 경로 (`/hello`)

 

 

하지만 이렇게 중요한 정보는 제대로 표시 되지 않는다. 그 이유는 사용자에게 함부로 노출 되었다가는 공격 당할 수 있기 때문에 애초에 막혀있다.

 

따라서 어떤 정보를 포함할지는 직접 설정해야한다.

 

application.properties
server.error.include-exception=false
: exception 포함 여부( true , false )

server.error.include-message=never : message 포함 여부

server.error.include-stacktrace=never : trace 포함 여부

server.error.include-binding-errors=never : errors

 

application.properties

  server.error.include-exception=true
  server.error.include-message=on_param
  server.error.include-stacktrace=on_param
  server.error.include-binding-errors=on_param

 

 

프로퍼티에 적용하면 오류가 보이겠지만, 사용자에게 노출 되는 것은 실무에서 특히나 위험하다.

그러니 로그에만 적용해서 사용해야한다.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함