티스토리 뷰
스프링 부트는 자동으로 에러페이지를 작성해준다. BasicErrorController
dev_0hoon 2023. 12. 2. 15:13
어떠한 등록도 안한 경우 Spring boot에서는 기본적으로 /error를 호출하게 된다. 그 컨트롤러의 정체는 스프링 부트에서 제공하는 BasicErrorController이다.
스프링 부트는 이런 과정을 모두 기본으로 제공한다.
ErrorPage 를 자동으로 등록한다. 이때 /error 라는 경로로 기본 오류 페이지를 설정한다.
new ErrorPage("/error") , 상태코드와 예외를 설정하지 않으면 기본 오류 페이지로 사용된다. 서블릿 밖으로 예외가 발생하거나, response.sendError(...) 가 호출되면 모든 오류는 /error 를 호출하게 된다.
BasicErrorController 라는 스프링 컨트롤러를 자동으로 등록한다. ErrorPage 에서 등록한 /error 를 매핑해서 처리하는 컨트롤러다.
개발자가 할 일은 오류 html파일을 룰에 맞춰 경로에 넣어주면 끝이다
4xx의 경우 405,406등 4로 시작하는 모든 오류를 쓸 수 있다.
뷰 선택 우선순위
BasicErrorController 의 처리 순서
- 뷰템플릿 resources/templates/error/500.html resources/templates/error/5xx.html
- 정적리소스(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
프로퍼티에 적용하면 오류가 보이겠지만, 사용자에게 노출 되는 것은 실무에서 특히나 위험하다.
그러니 로그에만 적용해서 사용해야한다.
'dev_공부일지 > spring boot + intelliJ' 카테고리의 다른 글
api 요청 예외처리 일때에도 부트는 자동으로 지원한다 . 아래글과 이어짐 (0) | 2023.12.04 |
---|---|
api 예외처리는 html이면 안된다. (0) | 2023.12.03 |
Interceptor를 이용할 때에 오류페이지는 타지않는 방법 (0) | 2023.12.02 |
ErrorPage 만들기 (0) | 2023.12.01 |
ArgumentResolver 직접 어노테이션 만들기 (0) | 2023.11.29 |
- Total
- Today
- Yesterday
- 향해99
- 향해플러스
- 로그인
- ArgumentResolver
- hypertexttransferprotocol
- jpa api
- reject
- 향해플러스백엔드
- thymleaf
- HTTP
- 스프링부트
- 컨트
- exception
- 백엔드 개발자 공부
- 항해99
- 리터럴
- rejectValue
- Intercepter
- 스프링공부
- JPA
- react실행
- 인터셉터
- SpringBoot
- 예외처리
- Java
- BindingResult
- 백엔드 개발자 역량
- filter
- React
- 항해플러스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |