Jackson ContextualDeserializer

Jackson의 ContextDeserializer 를 사용한 경험을 기록한다.

ContextualDeserializer는 createContextual메서드를 이용해
상황에 맞는 적절한 Deserialzer를 지정해주는 역할을 한다.

createContextual 메서드에서는 해당 프로퍼티 정보를 참조할수 있기 때문에
프로퍼티에 정의된 어노테이션 정보들을 알 수 있다.

Deserializer 시에 필드의 어노테이션을 확인하기 위해서는 ContextualDeserializer 를 구현하자.

Xss 방지 기능 적용을 위해 Jackson에 내장된 StringDeserializer을 상속받는
XssEscapeStringDeserializer를 만들었다.

작성을 하다보니, xss escape가 필요없는 부분에 대해서도 고려하게 되었다.
Json Property에 어노테이션을 달아서 xss escape가 동작하지 않도록
예외를 주려했다.

아래는 ContextualDeserialzer를 이용하여
프로퍼티또는 컨텍스트에 IgnoreXssEscape라는 어노테이션 존재 여부에 따라, 기존 StringDeserialzer 또는 XssEscapeStringDeserializer로 분기되는 코드이다.

xss escape 하는 로직은 naver lucy를 사용하고 있어서. 만약 xss 방지를 무시하고 싶다면 xml로 예외 처리를 해도 된다.

Written by

엘디는 사랑입니다.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store