엔티티 구현
User
인증에 사용되는 사용자 클래스 구현
package com.jh.jwt.domain;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Builder
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(length = 100, nullable = false, unique = true)
private String username;
@Column(length = 300, nullable = false)
private String password;
@Enumerated(EnumType.STRING)
private Authority authority;
private String refreshToken;
public void setRefreshToken(String refreshToken) {
this.refreshToken = refreshToken;
}
}
Authority
인가에 사용되는 권한 Enum 클래스 구현
package com.jh.jwt.domain;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@Getter
@RequiredArgsConstructor
public enum Authority {
ADMIN("ROLE_ADMIN"), USER("ROLE_USER");
private final String key;
}
CustomUserDetails구현
CustomUserDetails
Spring Security의 UserDetail을 상속받아 User엔티티에 맞도록 CustomUserDetails 클래스 구현
package com.jh.jwt.domain;
import lombok.Data;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import java.util.ArrayList;
import java.util.Collection;
@Data
public class CustomUserDetails implements UserDetails {
private final User user;
public CustomUserDetails(User user) {
this.user = user;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
Collection<GrantedAuthority> authorities = new ArrayList<>();
authorities.add(() -> user.getAuthority().getKey());
return authorities;
}
@Override
public String getPassword() {
return user.getPassword();
}
@Override
public String getUsername() {
return user.getUsername();
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
}
'Spring > Server' 카테고리의 다른 글
Spring JPA + JWT로 로그인 구현하기(5) - 로그아웃 구현(Redis) (1) | 2023.10.05 |
---|---|
Spring JPA + JWT로 로그인 구현하기(4) - 인증 API 구현 (1) | 2023.10.04 |
Spring JPA + JWT로 로그인 구현하기(3) - Configuration 구현 (0) | 2023.08.18 |
Spring JPA + JWT로 로그인 구현하기(1) - 기본 설정 (0) | 2023.08.04 |
[JWT] JWT(Json Web Token)란 무엇인가? (0) | 2023.07.21 |