UserDetails 구현체 isEnabled 필드 생성 문제

선종우·2023년 7월 24일
0

1. 문제점

@NoArgsConstructor
@Builder
@JsonIgnoreProperties(ignoreUnknown = true)
@ToString
public class User implements UserDetails {
    @Getter private Long id;
    @Getter private String userName;
    @Getter private String password;
    @Getter private UserRole userRole;
    @Getter private Timestamp registeredAt;
    @Getter private Timestamp updatedAt;
    @Getter private Timestamp deletedAt;

    @Builder
    public User(Long id, String userName, String password, UserRole userRole, Timestamp registeredAt, Timestamp updatedAt, Timestamp deletedAt) {
        this.id = id;
        this.userName = userName;
        this.password = password;
        this.userRole = userRole;
        this.registeredAt = registeredAt;
        this.updatedAt = updatedAt;
        this.deletedAt = deletedAt;
    }

    public static User fromEntity(UserEntity userEntity) {
        return User.builder()
                .id(userEntity.getId())
                .userName(userEntity.getUserName())
                .password(userEntity.getPassword())
                .userRole(userEntity.getRole())
                .registeredAt(userEntity.getRegisteredAt())
                .updatedAt(userEntity.getUpdatedAt())
                .deletedAt(userEntity.getDeletedAt())
                .build();
    }

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return List.of(new SimpleGrantedAuthority(this.getUserRole().toString()));
    }

    @Override
    public String getUsername() {
        return this.userName;
    }

    @Override
    public boolean isAccountNonExpired() {return this.deletedAt == null;}
    @Override
    public boolean isAccountNonLocked() {return this.deletedAt == null;}

    @Override
    public boolean isCredentialsNonExpired() {return this.deletedAt == null;}

    @Override
    public boolean isEnabled() {return this.deletedAt == null;}
}
  • 위 코드에 대해 ObjectMapper가 자꾸 isAccountNonExpired, isAccountNonLocked, isCredentailNonExpired, isEnables 필드를 생성했다.
  • 알고보니 Java beans 프로퍼티에 대한 정의에 Boolean Getter isXXX()로 정의하게끔 되어 있었다. 따라서 is가 붙은 메소스들을 프로퍼티로 인식하고 serialize한 것이다.

0개의 댓글