UserDetails
Member Entity 추가
@Entity
@Getter
@NoArgsConstructor
public class Member implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true)
private String email;
private String name;
private String password;
private String address;
private String role;
@Builder
public Member(String email, String name, String password, String address, String role) {
this.email = email;
this.name = name;
this.password = password;
this.address = address;
this.role = role;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
ArrayList<GrantedAuthority> auth = new ArrayList<>();
auth.add(new SimpleGrantedAuthority(role);
return auth;
}
@Override
public String getUsername() {
return this.email;
}
@Override
public String getPassword(){
return this.password;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
}
getAuthorities() : 계정이 가지고 있는 권한 목록 리턴
getPassword() : 계정의 비밀번호 리턴
getUsername() : 계정 이름 리턴
다른 블로그를 보면 PK값을 넘겨주는경우가있지만 나는 email을 넘여주었다.
isAccountNonExpired() : 계정이 만료됐는지 리턴 (true 만료 X)
isAccountNonLocked() : 계정이 잠겨있는지 리턴 (true 잠김 X)
isCredentialNonExpired() : 비밀번호가 만료됐는지 리턴 (true 만료 X)
isEnabled() : 계정이 활성화 되있는지 리턴 (true 활성화 O)
UserDetailsService
MemberRepository 수정
public interface MemberRepository extends JpaRepository<Member, Long> {
Member findByEmail(String email);
}
Email값으로 Member를 찾아주는 findByEmail을 추가하였다.
CustomUserDetailsService 작성
@Service
@RequiredArgsConstructor
public class CustomUserDetailsService implements UserDetailsService {
private final MemberRepository memberRepository;
/**
*
* @param username the username identifying the user whose data is required.
* @return Member
* @throws UsernameNotFoundException
*/
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
Member member = memberRepository.findByEmail(username);
if(member != null){
return member;
}else
throw new UsernameNotFoundException("can not found User : "+username);
}
}
loadUserByUsername을 오버라이드해서 작성해야한다.
MemberRepository에서 email값으로 찾아준다음
null인이 체크한뒤 null이면 UsernameNotFoundException
null이 아니면 member를 리턴해준다.