유튜브 "개발자 유미"님 강의를 듣고 정리한 내용입니다.
이번에는 DB를 사용하지 않고 인메모리로 유저 정보를 저장하는 방법에 대해서 알아보자.
DB를 사용하지 않기 때문에, build.gradle에서 DB 드라이버나 JPA와 관련된 dependency는 필요하지 않다.
Security Config에서 다음 빈을 등록한다.
@Bean
public UserDetailsService userDetailsService() {
UserDetails user1 = User.builder()
.username("user1")
.password(bCryptPasswordEncoder().encode("1234"))
.roles("C")
.build();
UserDetails user2 = User.builder()
.username("user2")
.password(bCryptPasswordEncoder().encode("1234"))
.roles("B")
.build();
UserDetails user3 = User.builder()
.username("user3")
.password(bCryptPasswordEncoder().encode("1234"))
.roles("A")
.build();
return new InMemoryUserDetailsManager(user1, user2, user3);
}
UserDetailsService를 반환 타입으로 하여 빈 등록 메서드를 작성한다.
인메모리를 적용하기 위해 UserDetailsService의 구현체인 InMemoryUserDetailsManager 객체를 반환하도록 한다.
인메모리로 저장하고자 하는 User 객체는 org.springframework.security.core.userdetails.User 경로의 User 클래스로부터 builder를 사용해서 생성할 수 있다.
username, password, role을 설정한 후, build()로 생성한다.
생성한 User 객체들은 InMemoryUserDetailsManager 객체를 생성하여 반환할 때 파라미터로 넣어주면 된다.