본문 바로가기

WEB/Spring

UserDetailsService

스프링 시큐리티가 제공하는 UserDetailsService 인터페이스는 로그인

 

 

loadUserByUsername 메서드는 매개변 username으로 스프링 시큐리티의 사용자 객체를 조회하고 반환하는 메서드

 

 

@RequiredArgsConstructor
@Service
public class UserSecurityService implements UserDetailsService {
    private final UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

        Optional<SiteUser> _siteUser=this.userRepository.findByusername(username);//username으로 SiteUser 객체 조회
        if(_siteUser.isEmpty()){
            throw new UsernameNotFoundException("사용자를 찾을 수 없습니다"); //객체 조회시 없을경우 UsernameNotFoundException 발생 
        }
        SiteUser siteUser=_siteUser.get();
        List<GrantedAuthority> authorityList=new ArrayList<>();
        if("admin".equals(username)){
            authorityList.add(new SimpleGrantedAuthority(UserRole.ADMIN.getValue()));
        }else{
            authorityList.add(new SimpleGrantedAuthority(UserRole.USER.getValue()));
        }
        return new User(siteUser.getUsername(), siteUser.getPassword(), authorityList);
    }
}

 

 

 

마지막에 User 객체를 반환

 

추가로

@Bean
    AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration)throws Exception{
        return authenticationConfiguration.getAuthenticationManager();
    }

 

스프링 시큐리티의 인증을 처리하는 AuthenticationManager 빈을 생성하여 UserSecurityService와 PasswordEncoder를 내부적으로 사용하여 인증과 권한 부여 프로세스를 처리해준다!

 

<참고>

https://wikidocs.net/162255

'WEB > Spring' 카테고리의 다른 글

DAO/DTO  (0) 2024.05.18
get,post,update,delete  (0) 2024.03.11
BCryptPasswordEncoder(비크립트패스워드인코더)  (0) 2024.02.24
Paging 구현  (0) 2024.02.24
Validation  (0) 2024.02.22