Web/웹 상식
[Spring] @InitBinder에 대해서
MarrRang
2022. 3. 31. 21:57
최근에 Spring 관련해서 보안 이슈가 하나 있었습니다. JDK 9 버전 이상의 모든 Spring Core에서 원격 코드 실행이 가능한 0-Day Exploit의 취약점이 알려졌습니다. 그리고 패치 이전에 공격코드가 이미 알려진 상태였습니다.
https://www.lunasec.io/docs/blog/spring-rce-vulnerabilities/
이에 대해 임시적인 조치를 취하던 와중에 @InitBinder라는 어노테이션을 부끄럽지만 처음 보게 되었습니다.
그래서 간단하게 정리하고자 합니다.
InitBinder
- Controller로 인입되는 요청에 대해 추가적인 설정을 할 수 있게 해 준다.
- 속한 Controller의 모든 요청 전에 InitBinder를 선언한 메서드가 실행된다.
사용법
@Controller
public class TestController {
@InitBinder
public void initBinder(WebDataBinder webDataBinder) {
webDataBinder.setDisallowedFields("test");
webDataBinder.setAllowedFields("test");
webDataBinder.addCustomFormatter();
webDataBinder.registerCustomEditor(String.class, customStringEditor);
webDataBinder.addValidators(new TestValidater());
}
}
// @ControllerAdvice에도 사용 가능하다
@ControllerAdvice
public class TestControllerAdvice {
// 특정 객체에만 적용할 때
@InitBinder("String")
public void initBinder(WebDataBinder webDataBinder) {
...
}
}
- WebDataBinder
- 요청 매개변수를 모델 객체에 바인딩하는 역할
- setDisallowedFields("test")
- 객체의 프로퍼티 중 test라는 필드가 있는 경우 적용된다.
- 해당 필드가 값이 설정되어 인입되는 것이 원치 않을 경우 사용하고 해당 값이 없도록 처리된다.
- setAllowedFields("test")
- 허용할 필드를 지정하여 해당 값들만 허용한다.
- addCustomFormatter()
- 사용자 지정 Formatter를 등록할 수 있다.
- registerCustomEditor()
- 사용자 지정 CustomEditor를 등록할 수 있다.
- addValidators()
- Validator를 등록할 수 있다.
반응형