728x90
스프링 기반 REST API 개발
5. REST API 보안 적용
포스팅 참조 정보
GitHub
공부한 내용은 GitHub에 공부용 Organizations에 정리 하고 있습니다
해당 포스팅에 대한 내용의 GitHub 주소
실습 내용이나 자세한 소스코드는 GitHub에 있습니다
포스팅 내용은 간략하게 추린 핵심 내용만 포스팅되어 있습니다
https://github.com/freespringlecture/spring-rest-api-study/tree/chap05-11_restrict_output_data
해당 포스팅 참고 인프런 강의
https://www.inflearn.com/course/spring_rest-api/dashboard
실습 환경
- Java Version: Java 11
- SpringBoot Version: 2.1.2.RELEASE
11. Events API 개선: 출력값 제한하기
- 이전에 작업한
@CurrentUser
애노테이션을 이용해 manager 정보를 생성해주는데 - email 이외에 패스워드와 권한 까지 모두 노출되는 문제가 있음
- 지난 번에는 ErrorSerializer에서
@JsonComponent
를 사용해서 ObjectMapper에 등록이 되도록 했었음 @JsonCommponent
를 사용하지 않고 Serializer 처리
{
"id" : 4,
"name" : "test 3PISM1Ju",
"description" : "test event",
...
"free" : false,
"eventStatus" : "DRAFT",
"owner" : {
"id" : 3,
"email" : "keesun@email.com",
"password" : "{bcrypt}$2a$10$3z/rHmeYsKpoOQR3aUq38OmZjZNsrGfRZxSnmpLfL3lpLxjD5/JZ6",
"roles" : [ "USER", "ADMIN" ]
},
생성 API 개선
- Event owner 설정
- 응답에서 owner의 id만 보내 줄 것
JsonSerializer<User>
구현
JsonSerializer 를 상속 받아 account의 id만 보내주도록 AccountSerializer 구현
package me.freelife.rest.accounts;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
public class AccountSerializer extends JsonSerializer<Account> {
@Override
public void serialize(Account account, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeNumberField("id", account.getId());
gen.writeEndObject();
}
}
Event 객체에 @JsonSerialize(using)
설정
Event를 Serialization 할때는 manager를 AccountSerializer로 Serialization 하도록 설정
...
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import me.freelife.rest.accounts.AccountSerializer;
@ManyToOne
@JsonSerialize(using = AccountSerializer.class)
private Account manager; //account 관리자
...
728x90
'개발강의정리 > Spring' 카테고리의 다른 글
[스프링 기반 REST API 개발] 6-2. 스프링 부트 2.2.5 버전으로 업데이트 (0) | 2020.04.13 |
---|---|
[스프링 기반 REST API 개발] 6-1. 깨진 테스트 살펴보기 (0) | 2020.04.12 |
[스프링 기반 REST API 개발] 5-10. 스프링 시큐리티 현재 사용자 조회 (0) | 2020.04.10 |
[스프링 기반 REST API 개발] 5-9. 이벤트 API 점검 (0) | 2020.04.09 |
[스프링 기반 REST API 개발] 5-8. 문자열을 외부 설정으로 빼내기 (0) | 2020.04.08 |
댓글