InMemoryUserDetailsManager
InMemoryUserDetailsManager는 사용자 정보를 메모리에 저장하고 관리하는 구현체입니다. 이 구현체는 주로 개발 및 테스트 목적으로 사용되며, 애플리케이션이 종료되면 모든 사용자 정보가 사라집니다.
주요 특징:
- 저장소: 메모리
- 사용 사례: 간단한 테스트나 데모 애플리케이션
- 장점: 설정이 간단하고 빠르게 사용할 수 있습니다.
- 단점: 애플리케이션이 종료되면 데이터가 사라지며, 많은 사용자 정보를 관리하기에는 부적합합니다.
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.provisioning.UserDetailsManager;
@Configuration
public class SecurityConfig {
@Bean
public UserDetailsManager userDetailsManager() {
InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
UserDetails user = User.withDefaultPasswordEncoder()
.username("user")
.password("password")
.roles("USER")
.build();
manager.createUser(user);
return manager;
}
}
JdbcUserDetailsManager
JdbcUserDetailsManager는 사용자 정보를 관계형 데이터베이스에 저장하고 관리하는 구현체입니다. 이 구현체는 JDBC를 사용하여 데이터베이스와 상호작용합니다.
주요 특징:
- 저장소: 관계형 데이터베이스 (RDBMS)
- 사용 사례: 실제 애플리케이션에서 사용자 정보를 영구적으로 저장할 때
- 장점: 데이터가 영구적으로 저장되며, SQL을 사용하여 복잡한 쿼리를 수행할 수 있습니다.
- 단점: 설정이 복잡할 수 있으며, 데이터베이스 연결 설정이 필요합니다.
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.provisioning.JdbcUserDetailsManager;
import org.springframework.security.provisioning.UserDetailsManager;
import javax.sql.DataSource;
@Configuration
public class SecurityConfig {
@Autowired
private DataSource dataSource;
@Bean
public UserDetailsManager userDetailsManager() {
JdbcUserDetailsManager manager = new JdbcUserDetailsManager(dataSource);
UserDetails user = User.withDefaultPasswordEncoder()
.username("user")
.password("password")
.roles("USER")
.build();
manager.createUser(user);
return manager;
}
}
LdapUserDetailsManager
LdapUserDetailsManager는 사용자 정보를 LDAP(경량 디렉토리 액세스 프로토콜) 서버에 저장하고 관리하는 구현체입니다. 주로 기업 환경에서 사용되며, 중앙 집중식 사용자 관리가 가능합니다.
주요 특징:
- 저장소: LDAP 서버
- 사용 사례: 기업 환경에서 중앙 집중식 사용자 관리가 필요할 때
- 장점: 중앙 집중식으로 사용자 정보를 관리할 수 있으며, 보안이 강화됩니다.
- 단점: 설정이 매우 복잡할 수 있으며, LDAP 서버 설정과 관리가 필요합니다.
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.ldap.userdetails.LdapUserDetailsManager;
import org.springframework.security.ldap.userdetails.UserDetailsContextMapper;
import org.springframework.security.ldap.userdetails.PersonContextMapper;
@Configuration
public class SecurityConfig {
@Bean
public LdapUserDetailsManager ldapUserDetailsManager() {
LdapUserDetailsManager manager = new LdapUserDetailsManager();
manager.setUserDetailsContextMapper(userDetailsContextMapper());
return manager;
}
@Bean
public UserDetailsContextMapper userDetailsContextMapper() {
return new PersonContextMapper();
}
}