cbw1030
기록하는 공간
cbw1030
전체 방문자
오늘
어제
  • 전체보기 (101)
    • Programming (99)
      • Java (19)
      • Servlet (10)
      • Spring Framework (13)
      • Javascript (22)
      • AWS (2)
      • 네트워크 (8)
      • 데이터베이스 (13)
      • 리눅스 (3)
      • 블록체인 (7)
      • 용어 정리 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • react
  • 브라이틱스 스튜디오
  • 인공지능
  • 삼성SDS
  • 생활코딩
  • javascript
  • 브라이틱스 스튜디오 사용법
  • 브라이틱스
  • Brightics Studio
  • 삼성SDS 브라이틱스
  • 데이터 사이언스
  • 데이터분석
  • 브라이틱스 튜토리얼
  • 차원축소
  • web
  • 크롤링
  • beautifulsoup
  • Brightics AI
  • 머신러닝
  • Brightics

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
cbw1030

기록하는 공간

Programming/Spring Framework

[Jackson] 민감한 데이터를 JsonProperty를 통해 serialize, deserialize 하는 방법

2022. 1. 22. 13:16
반응형

 

안녕하세요. 이번 포스팅은 클라이언트가 정보를 조회했을 때 모든 데이터를 보여주는 것이 아닌 Jackson 라이브러리를 사용해서 필요한 데이터만 보여주는 방법에 대해 소개하겠습니다.

 

아래의 User 클래스가 있다고 가정하겠습니다.

@Data // lombok
public class User {
    private int id;
    private String userId;
    private String password;
}

클라이언트가 어떤 회원에 대한 정보를 조회하기 위해 GET 요청을 했을 때  아무런 조치를 하지 않는다면 id, userId, password를 모두 조회할 수 있게 됩니다. 

password는 중요한 정보이기 때문에 보여주면 문제가 발생합니다.

 

스프링부트에서는 Jackson 라이브러리를 기본적으로 갖고 있기 때문에 의존성을 추가할 필요는 없습니다.

@Data // lombok
public class User {
    private int id;
    private String userId;
    
    @JsonIgnore
    private String password;
}

 

password에 @JsonIgnore 어노테이션을 추가함으로써 클라이언트가 정보를 조회할 때 서버에서는 password 필드를 제외한 id, userId만 응답하게 됩니다.

 

하지만 @JsonIgnore는 직렬화 뿐만 아니라 역직렬화를 할 때에도 적용된다는 특징이 있습니다.

회원이 로그인을 할 때 userId, password를 입력하는데 @JsonIgnore를 password 필드에 적용함으로써 서버로 userId만 넘어오게 됩니다. 이렇게 되면 회원은 로그인을 할 수가 없습니다. 

 

이를 해결하는 방법은 @JsonProperty를 사용하면 됩니다. (더 있을 수도 있어요)

  • AUTO
  • READ_ONLY
  • WRITE_ONLY
  • READ_WRITE

 

@Data // lombok
public class User {
    private int id;
    private String userId;
    
    @JsonProperty(access = Access.WRITE_ONLY)
    private String password;
}

 

@JsonProperty(access = Access.WRITE_ONLY)

@JsonProperty 어노테이션에 access 옵션을 Access.WRITE_ONLY로 주면 됩니다.

말 그대로 역직렬화(deserialize; JSON -> Java Object)할 때에만 접근이 허용된다는 뜻입니다. 

클라이언트의 요청이 들어올 때는 password 데이터를 받을 수 있지만, 조회를 할 때에는 제외되기 때문에 응답 본문에 표시되지 않습니다.

 

@JsonProperty의 access 옵션은 WRITE_ONLY 말고도 세 가지가 더 있습니다.

- AUTO

- READ_ONLY

- READ_WRITE

 

직관적이라 쉽게 이해하실겁니다.

 

 

롬복을 사용하지 않는다면 아래처럼 사용도 가능합니다.

Getter에 @JsonIgnore를 설정하고 Setter에 @JsonProperty를 설정하면 역직렬화할 때에만 접근이 허용됩니다.

 

 

참고

https://github.com/cheese10yun/blog-sample/tree/master/jackson

반응형
저작자표시 (새창열림)

'Programming > Spring Framework' 카테고리의 다른 글

[스프링] MultipartFile 인터페이스를 활용한 다중 파일 업로드  (0) 2022.01.15
[스프링부트] MockMvc Test 2가지 방법  (0) 2021.11.27
[스프링부트] Tiles, JSP 사용을 위한 Dependency 설정 및 JSP 수정사항 자동 반영하기  (0) 2021.11.06
[스프링] HandlerMethodArgumentResolver에 대해 알아보자  (0) 2021.06.09
[스프링부트] AWS S3에 파일 업로드 하기  (0) 2021.06.05
    'Programming/Spring Framework' 카테고리의 다른 글
    • [스프링] MultipartFile 인터페이스를 활용한 다중 파일 업로드
    • [스프링부트] MockMvc Test 2가지 방법
    • [스프링부트] Tiles, JSP 사용을 위한 Dependency 설정 및 JSP 수정사항 자동 반영하기
    • [스프링] HandlerMethodArgumentResolver에 대해 알아보자
    cbw1030
    cbw1030

    티스토리툴바