티스토리 뷰
개인적인 공부용이니까
참고만 해주십시오....
이해가 안될 수 있습니다....
오늘은
스프링 시큐리티를 이용하여
인증을 하고자할때 사용되는
UserDetailsService를 커스텀하는 것에 대해 알아보려고 한다.
책을 그냥 보기만 하면 이해가 안되서
적어가면서 정리..
아무튼
무작정 만들기 전에 이걸 왜 하는지 정도는 알자..
(뚝딱뚝딱)
UserDetailsService를 왜 커스텀하나요?
A: 인증 매니저를 커스텀하고 싶기 때문입니다.
커스텀을 하는 이유가 뭔가요?
A: 원하는 방식으로 스프링 시큐리티를 이용하고자하기 때문입니다.
인증 매니저가 뭔데요?
A: 인증에 대한 실제적인 처리를 담당하는 인터페이스입니다.
UserDetailsService와 인증매니저(Authentication Manager)와의 관계는??
A: 이건....
인증 매니저는 인증 처리를 한 다음 결과를 UserDetails 타입으로 반환하는데
이 때 UserDetailsService를 써서 정보를 어떻게 처리할지(인증되는방식) 판단한다.
InMemoryUserDetailsManager, JdbcUserDetailsManager도 UserDetailsService를 구현한 것
결론. 내가 원하는 대로 인증 처리하기 위해서
UserDetailsService를 커스텀한다.
=> DB를 사용해서 인증 처리 하고자 할 때 사용하게 되는것 같음..!
"개발자가 인증 매니저를 커스텀하려면 UserDetailsService 인터페이스를 구현하고,
이를 HttpSecurity 객체가 사용할 수 있도록 지정해야한다"
어떻게 하냐면,
...
UserDetailsService를 구현하는 클래스를 하나 만든다.
@Service
public class CustomUsersService implements UserDetailsService{
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException{
return ..;
}
}
loadByUserByUsername 메서드가 오버라이드 되는데
이 메서드가 뭐냐면
사용자의 계정 정보(아이디)를 이용해 UserDetails 인터페이스를 구현하고
그 객체를 반환하는 메서드
(나중에 자세한 설명..)
암튼 구현한 클래스를 http 객체가 사용할 수 있도록 주입하고 지정하면 된다.
내가 참고하는 책에서는 SecurityConfig 설정의 configure 메서드의 파라미터 http에게 넘겼다...
http.userDetailsService(zecorkUsersService);
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception{
http.userDetailsService(CustomUsersService);
...
}
}
loadByUserByUsername에서 UserDetails 타입 객체(User 클래스)를 반환할 수 있도록 한다.
(User클래스: UserDetails를 구현해 둔 클래스)
그런 다음 내가 하던 프로젝트의 데이터들과 연결해야한다.
MemberRepository와 연동한다.
@Autowired
MemberRepository memberRepo;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException{
return memberRepo.findById(username)
.filter(member -> member != null)
.map(member -> new CustomSecurityUser(member))
.get();
}
여기까지만 씁니다...
나중에는 지금보다 더 잘 이해되겠지
참고한 자료 | 스타트스프링부트
'#2 > Spring boot' 카테고리의 다른 글
[Spring boot] Spring boot admin 사용해보기 (0) | 2022.06.24 |
---|---|
[Spring boot] ehcache3으로 캐시를 써보자 (0) | 2022.04.06 |
[Spring boot] Junit 테스트 아무것도 안뜸 | junit4, junit5 (0) | 2022.02.21 |
[Spring boot] sts maven 프로젝트 생성 시 무한 로딩 79% (0) | 2022.01.25 |
[Spring boot] 파일 업로드, 다운로드, 이미지 띄우기 (0) | 2021.10.07 |