최대 1 분 소요

UserDetails를 구현한 PrincipalDetails를 정의해주자.

@Data
public class PrincipalDetails implements UserDetails {

    private User user;

    public PrincipalDetails(User user) {
        this.user = user;
    }

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return null;
    }

    @Override
    public String getPassword() {
        return user.getPassword();
    }

    @Override
    public String getUsername() {
        return user.getEmail();
    }

    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    @Override
    public boolean isEnabled() {
        return true;
    }
}
  • 생성자로 User를 받아 필드로써 활용
  • 로그인 ID를 username이 아닌 email로 할 것이기 때문에 user.getEmail() 적용
  • 다른 함수 설명은 여기를 참고

그렇게 선언한 PrincipalDetails@AuthenticationPrincipal와 함께 다음처럼 활용할 수 있고,
이렇게 얻은 사용자는 현재 사용자를 의미한다.

@GetMapping("/test")
public ResponseEntity<?> test(@AuthenticationPrincipal PrincipalDetails principalDetails) {
    return new ResponseEntity<>(principalDetails.getUser().getId(), HttpStatus.OK);
}

카테고리:

업데이트:

댓글남기기