UserSecurityService

인철·2023년 10월 4일

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에서 _(언더스코어)는 일종의 더미변수로 사용된다
profile
같은글이있어도양해부탁드려요(킁킁)

0개의 댓글