Programing/Java & Spring

[Spring] 정의되지 않은 요청 파라미터에 대한 유효성 검증 및 Jackson 과 @EnableWebMvc의 관계성

세기루민 2024. 11. 12. 22:17
728x90

회사에서 취약점 개선 개발을 진행하면서 아래의 이슈를 접하게 되었다.

"정의되지 않은 요청 파라미터에 대해서 유효성 검증 필요"

 

해당 수정 방안은 ObjectMapper Configuration 설정 방법 혹은 Jackson 설정 방법이 있는데

그 중 가장 간단한 방법인 Jackson 설정으로 변경해보려고 한다.

 

변경 방법

1. Application.yml 

Jackson:
	deserialization:
		fail-on.unknown-properties : true
  • JackSon.deserialization.fail-on.unknown-properties은 Json 역직렬화 시 객체에 정의되지 않은 속성이 들어올 경우
    UnrecognizedPropertyException 예외를 발생 시키는 설정이다.

 

2. Application.yml 수정으로도 적용이 안될 경우

Application.yml에 설위와 같이 설정하면 보통 다 해결이 된다.

다만 내가 담당하던 서비스의 경우는 적용이 안되는 이슈가 있었고...

이에 따라 몇일간 삽질을 하다가 알게 된 사실이 있었다.

바로 @EnableWebMvc 어노테이션을 사용하게 될 경우 정상적으로 작동하지 않을 수 있다는 점이다.

 

2.1 @EnableWebMvc이 무슨 문제가 있어서 Jackson이 적용이 안되는거야?

  • 우선 @EnableWebMvc란 Spring Boot의 자동 구성 기능을 비 활성화하고 개발자가 수동적으로 Spring MVC 설정을 정의할 수 있는 어노테이션이다. 
  • 해당 어노테이션의 경우 Spring Boot의 설정을 무시하게 되는데, 이때 Spring Boot 내에서 사용중인 Jackson 프로퍼티에 대해서 무시하게 되어 Application.yml에 설정을 하더라도 정상적으로 작동하지 않았던 것이다.
@ControllerAdvice
@EnableWebMvc
public class CustomExceptionHandler() {
	...
}

위의 예시 코드처럼 내가 담당하던 서비스의 예외 처리를 관리하는 클래스에 @EnableWebMvc 어노테이션을 사용하고 있었는데

당연히 jackson 설정이 비활성화 되어 적용이 안되었던 것이다.

 

이에 따라, application.yml 설정을 하였는데도 안되는 경우라면 @EnableWebMvc 설정이 되어 있는지 확인해보길 바란다.

728x90