이전까지는 아주 간단한 UserDetailsService 빈을 정의하여 사용하고 있었다. 코드를 한번 살펴보면 현재 username, password, roles 를 하드코딩하여 UserDetails 를 생성하고 또 그것을 InMemoryUserDetailsManager 에 주입하여 반환하는것을 볼 수 있다.
※ InMemoryUserDetailsManager
![]()
참고로
InMemoryUserDetailsManager도UserDetaisService인터페이스를 구현하고 있는 구현체이다.
하지만 이는 어디까지나 테스트용으로 간단하게 임시로 만들어 둔 UserDetailsService 이며 실질적으로 사용하기 위해서는 직접 UserDetailsService 를 커스텀 구현 해줘야한다.
참고로 커스텀한 UserDetailsSerivce 를 빈으로 등록을 한다면 굳이 저렇게 config 파일에 등록 하지 않아도 알아서 스프링이 자동주입해준다. 이때 UserDetailsService 구현체는 DAOAuthenticationProvider 에 주입이 되는것이다.
간략히 흐름을 설명하자면
1) UserRepository 로 DB를 조회한다음 Account 엔티티를 반환 받는다.
2) Account 에 담긴 유저정보들을 추출한다음 AccountContext (UserDetails 의 구현체) 에 옮겨 담는다.
3) AccountContext 를 반환한다.
getPassword(), getUsername() 만 잘 구현해주고(사실 구현이랄것도 없다;;) 나머지 isXXX() 메서드들은 전부 true 를 반환하도록 하자.
본 포스트는
스프링 시큐리티 완전 정복 6.x 개정판 를 보고 정리했습니다.