본문 바로가기

카테고리 없음

[Spring Boot] Security6 UserDetailsManager 구현체

 

 

 

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();
    }
}