UserSecurityServic
사용자 인증 및 권한 부여를 처리하기 위한 서비스
스프링 시큐리티 로그인 처리의 핵심 부분
- 스프링 시큐리티가 제공하는 UserDetailsService 인터페이스를 구현해야 한다.
- 스프링 시큐리티의 UserDetailsService는 loadUserByUsername 메서드를 구현하도록 강제하는 인터페이스다
- loadUserByUsername 메서드는 사용자명으로 비밀번호 조회하여 리턴하는 메서드
@RequiredArgsConstrictor
@Service
public class UserSecurityService implements UserDetailsService{
Spring Security에서 사용자 정보를 로드하는데 사용
private final UserRepository userRepository;
RequiredArgsConstrictor으로 인해 생성자 자동 생성
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException{
사용자 이름을 받아와 해당 사용자 정보를 로드
Optional<SiteUser> _siteUser = this.userrepository.findByusername(username);
사용자 이름으로 데이터베이스에서 사용자 정보 조회
if(_siteUser.isEmpty){
throw new UsernameNotFoundException("사용자를 찾을수 없습니다")
사용자 정보를 찾을 수 없는 경우 UseranmeNotFoundException반환
}
SiteUser siteUser = _siteUser.get();
List<GrantedAuthority> authorities = new ArrayList<>();
사용자를 찾은경우 역할을 확인하고 권한을 생성
if("admin".equals(username)){
authorities.add(new SimpleGrantedAuthority(UserRole.ADMIN.getValue()))
getValue()를 통해 열거형의 ADMIN값을 가져옴
} else {
authorities.add(new SimpleGrantedAuthority(UserRole.USER.getValue()));
getValue()를 통해 열거형의 USER값을 가져옴
}
anthorities에는 사용자 역학을 SimpleGrantedAuthority에 추가
return new User(siteUser.getUsername(), siteUser.getPassword(), authorities);
User객체를 생성하여 사용자 이름, 비밀번호, 권한 목록을 포함시킴
}
}
_siteUser에서 _(언더스코어)는 일종의 더미변수로 사용된다