스프링 부트 2.3 버전 부터는 에러처리에 대한 메시지 정책이 변경되었다.
버전 변화로 인해 디폴트로 더이상 BindingExcption 대해서 발생원인에 대한 많은정보를 담고 있는 정보를 메세지에 담아서 보내지 않는다.
이에 대한 에러메세지에 대한 처리는
ErrorController -> DefaultErrorAttributes 에서 처리하고 있다.
에러처리를 ControllerAdvice, RestControllerAdvice 같은 별도의 에러처리를 사용하지 않는다면
embed tomcat까지 에러처리를 전파하게 되고 ErrorController에서 에러처리를 하게 된다.
친철하게 설명하고 있지 않지만 예전에 올려둔 아래 글을 참고하면 좋겠다. (개인 기록용으로 작성된 글이었다)
ErrorController -> DefaultErrorAttributes 에서는
위와 같이 ErrorAttibuteOpions 에 BINDING_ERROR가 있다면 메세지 errors 필드안에 binding error에 대한 상제정보를 얻을 수 있다.
이에 대한 메세지정보는
granger.tistory.com/51에서 확인가능하다( Spring Boot 2.1.x 기준)
그렇다면 ErrorAttibuteOpions 안에 BINDING_ERROR 옵션정보는 언제 set되는 것일까?
이것이 바로 server.error.include-binding-errors 에 대한 프로퍼티 에 대한 설정이다. (2.3.x버전 업데이트)
application.yml 같은 어플리케이션 프로퍼티에 설정하는등의 방법으로 에러정보를 메세지에 담을 수 있을지 지정하고 있다.
이에 대한 코드는 아래를 보면 알 수 있다.
스프링 부트 2.3.x 버전 이전에는 이에 대한 프로퍼티가 있지 않았고 디폴트로 항상 메세지에 errors를 포함했다.
errors안에는 바인딩에러에 대한 상세정보를 담고 있기 때문에 이를 외부 응답에 포함될 경우 보안 위험에 노출때문에 업데이트 되었다. (스프링 부트 github 이슈제기 : github.com/spring-projects/spring-boot/issues/20505)
'Spring' 카테고리의 다른 글
로컬과 운영서버에서 BindingError 메세지가 다르다? DevTools Property (1) | 2021.01.30 |
---|---|
Spring Boot 기존 요청 스레드 처리하고 안전하게 종료하기 (0) | 2020.01.16 |
Spring Boot - 등록된 Bean 객체 사용하기 (0) | 2019.12.17 |
2) Spring Boot Validation - Custom Annotation (0) | 2019.12.02 |
Spring Boot POST Encoding EUC-KR 한글깨짐(UTF-8)현상 (1) | 2019.11.18 |
댓글