23-07-13 TIL

more·2023년 7월 13일
0

문제

  • 후발대 과제
    • custom annotation을 활용해서 authorizedMember.getMember()와 같이 중복 개념(member에서 member 접근)을 제거하고 한번에 member를 가져오는 방식으로 개선해라
    • 일단 Annotation을 만드는 방법에 대한 공부를 해야 할 거 같고...
    • 처음 들어보는 거라 뭔 소린지 잘 모르겠다.

시도

  • 후발대 과제

    • 일단 시도는 해보자
    • custom annotation을 만들기 위해서 아래와 같은 코드를 작성
    import org.springframework.security.core.annotation.AuthenticationPrincipal;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Target({ElementType.PARAMETER})
    @Retention(RetentionPolicy.RUNTIME)
    @AuthenticationPrincipal
    public @interface CustomMemberInfo {
    
    }
    
    • 어노테이션은 다음과 같이 인터페이스 앞에 @를 붙여서 생성할 수 있다.
    • Target: 해당 어노테이션이 사용되는 위치를 결정
      -> ElementType.TYPE_PARAMETER로 지정했으니 매개 변수 타입 선언시 사용하겠다.
    • Retention: 해당 어노테이션의 정보를 어느 범위까지 유지할 것인지
      -> RetentionPolicy.RUNTIME을 사용해서 런타임시 계속 사용하겠다.
    • @AuthenticationPrincipal : 현재 사용자 정보를 사용하겠다.

해결

  • 후발대 과제

    • 잘 모르겠다. 일단 1번 코드를 2번으로 바꾸기는 했는데...
    1번
    @GetMapping("")
        public ResponseEntity<MemberInfo> getMemberInfo(@AuthenticationPrincipal AuthorizedMember authorizedMember) {
            if (authorizedMember == null) {
                return ResponseEntity.badRequest().build();
            }
    
            // TODO : authorizedMember.getMember()와 같은 중복 개념 접근 개선하기
            Member member = authorizedMember.getMember();
            return ResponseEntity.ok(new MemberInfo(member.getEmail(), member.getName(), member.getRoles()));
        }
    
    2번
    @GetMapping("")
        public ResponseEntity<MemberInfo> getMemberInfo(@CustomMemberInfo Member member) {
            if (member == null) {
                return ResponseEntity.badRequest().build();
            }
            // TODO : authorizedMember.getMember()와 같은 중복 개념 접근 개선하기
    //		Member member = authorizedMember.getMember();
            return ResponseEntity.ok(new MemberInfo(member.getEmail(), member.getName(), member.getRoles()));
        }

0개의 댓글