helloworld
데이터 필터링 본문
데이터를 사용하다보면 노출 시키고 싶지 않은 데이터들도 있을 것이다. 예컨데 비밀번호나 주민등록번호같은..
이번엔 데이터 필터링을 해본다.
전글에서 xml로 데이터를 변환시키기 위해 디펜던시를 하나 넣었다.
jackson 어쩌고저쩌고 ..
도메인클래스에서
public class User {
private Integer id;
@Size(min = 2, message = "Name은 2글자 이상 입력해주세요")
private String name;
@Past
private Date joinDate;
private String password;
private String ssn;//주민등록번호
}
private Integer id;
@Size(min = 2, message = "Name은 2글자 이상 입력해주세요")
private String name;
@Past
private Date joinDate;
private String password;
private String ssn;//주민등록번호
}
비밀번호와 주민번호를 추가해주었다.
예제코드에 있던 list에도 비밀번호와 주민번호를 추가해둔 상태다.
이 상태로 서버를 실행시키면
[
{
"id": 1,
"name": "Song",
"joinDate": "2023-08-13T11:21:56.633+00:00",
"password": "pass1",
"ssn": "701017-1111111"
},
{
"id": 2,
"name": "Woo",
"joinDate": "2023-08-13T11:21:56.633+00:00",
"password": "pass2",
"ssn": "801017-1111111"
},
{
"id": 3,
"name": "ChimChakMan",
"joinDate": "2023-08-13T11:21:56.633+00:00",
"password": "pass3",
"ssn": "901017-1111111"
}
]
아무튼 보안에 엄청 취약하다.
노출시키지 않기 위해 2가지 방법을 배웠는데
@JsonIgnore
private String password;
@JsonIgnore
private String ssn;//주민등록번호
private String password;
@JsonIgnore
private String ssn;//주민등록번호
이렇게 하나씩 어노테이션을 넣어주면
[
{
"id": 1,
"name": "Song",
"joinDate": "2023-08-13T11:23:45.984+00:00"
},
{
"id": 2,
"name": "Woo",
"joinDate": "2023-08-13T11:23:45.984+00:00"
},
{
"id": 3,
"name": "ChimChakMan",
"joinDate": "2023-08-13T11:23:45.984+00:00"
}
]
나오지 않는다.
다른 방법은
@Data
@AllArgsConstructor
@JsonIgnoreProperties(value={"password"})
public class User {
private Integer id;
@Size(min = 2, message = "Name은 2글자 이상 입력해주세요")
private String name;
@Past
private Date joinDate;
// @JsonIgnore
private String password;
// @JsonIgnore
private String ssn;//주민등록번호
}
@AllArgsConstructor
@JsonIgnoreProperties(value={"password"})
public class User {
private Integer id;
@Size(min = 2, message = "Name은 2글자 이상 입력해주세요")
private String name;
@Past
private Date joinDate;
// @JsonIgnore
private String password;
// @JsonIgnore
private String ssn;//주민등록번호
}
클래스 전체에 JsonIgnore 어노테이션을 달아주는 방법이다. 여기선 비교하기위해 비밀번호에만 걸었지만
(value={"password"},{"ssn"}, ...) 이런식으로 여러개를 달 수 있다.
[
{
"id": 1,
"name": "Song",
"joinDate": "2023-08-13T11:25:29.867+00:00",
"ssn": "701017-1111111"
},
{
"id": 2,
"name": "Woo",
"joinDate": "2023-08-13T11:25:29.867+00:00",
"ssn": "801017-1111111"
},
{
"id": 3,
"name": "ChimChakMan",
"joinDate": "2023-08-13T11:25:29.867+00:00",
"ssn": "901017-1111111"
}
]
역시 password는 노출되지 않는다.
'restful' 카테고리의 다른 글
| 버전관리 (0) | 2023.08.17 |
|---|---|
| 데이터 필터링 심화과정 (0) | 2023.08.13 |
| JSON 형태의 데이터를 xml 데이터로 변환하기 (0) | 2023.08.13 |
| 유효성 검사 (Validatation) (0) | 2023.08.13 |
| PUT (0) | 2023.08.13 |