@Service
public class CustomUserDetailsService implements UserDetailsService {
@Autowired
private UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
UserEntity userData = userRepository.findByUsername(username);
if (userData != null){
return new CustomUserDetails(userData);
}
return null;
}
}
public interface UserRepository extends JpaRepository<UserEntity, Integer> {
boolean existsByUsername(String username);
// 코드 추가
UserEntity findByUsername(String username);
}
public class CustomUserDetails implements UserDetails {
private UserEntity userEntity;
public CustomUserDetails(UserEntity userEntity){
this.userEntity = userEntity;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() { // 사용자의 특정한 권한을 리턴
Collection<GrantedAuthority> collection = new ArrayList<>();
collection.add(new GrantedAuthority() {
@Override
public String getAuthority() {
return userEntity.getRole();
}
});
return collection;
}
@Override
public String getPassword() {
return userEntity.getPassword();
}
@Override
public String getUsername() {
return userEntity.getUsername();
}
//밑에 4개는 실제 상황에 따라 false로 한다. true는 사용 가능하다는 뜻
@Override
public boolean isAccountNonExpired() { // 사용자의 계정이 만료되었는지
return true;
}
@Override
public boolean isAccountNonLocked() { // 사용자의 계정이 잠겨있나
return true;
}
@Override
public boolean isCredentialsNonExpired() { // 사용자의 자격 증명이 만료됐나
return true;
}
@Override
public boolean isEnabled() { // 계정 활성화로 사용가능하나
return true;
}
}