스프링 시큐리티가 제공하는 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를 내부적으로 사용하여 인증과 권한 부여 프로세스를 처리해준다!
<참고>
'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 |