1. 개요

 
이 빠른 사용방법(예제)에서는 Spring Security LDAP를 설정하는 방법을 배웁니다.시작하기 전에 LDAP가 무엇인지에 대한 참고 사항입니다. LDAP는 Lightweight Directory Access Protocol의 약자이며 네트워크를 통해 디렉토리 서비스에 액세스하기 위한 공급업체 중립적인 개방형 프로토콜입니다.

2. 메이븐 의존성

 
먼저 필요한 maven 의존성을 살펴보겠습니다.
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-ldap</artifactId>
</dependency>

<dependency>
    <groupId>org.apache.directory.server</groupId>
    <artifactId>apacheds-server-jndi</artifactId>
    <version>1.5.5</version>
</dependency>
참고:

ApacheDS

를 확장 가능하고 포함 가능한 디렉토리 서버인 LDAP 서버로 사용했습니다.

3. 자바 설정

 
다음으로 Spring Security Java 구성에 대해 논의해 보겠습니다.
public class SecurityConfig {

    @Bean
    ApacheDSContainer ldapContainer() throws Exception {
        return new ApacheDSContainer("dc=baeldung,dc=com", "classpath:users.ldif");
    }

    @Bean
    LdapAuthoritiesPopulator authorities(BaseLdapPathContextSource contextSource) {
        String groupSearchBase = "ou=groups";
        DefaultLdapAuthoritiesPopulator authorities = new DefaultLdapAuthoritiesPopulator
           (contextSource, groupSearchBase);
        authorities.setGroupSearchFilter("(member={0})");
        return authorities;
    }

    @Bean
    AuthenticationManager authenticationManager(BaseLdapPathContextSource contextSource, 
        LdapAuthoritiesPopulator authorities) {
        LdapBindAuthenticationManagerFactory factory = new LdapBindAuthenticationManagerFactory
           (contextSource);
        factory.setUserSearchBase("ou=people");
        factory.setUserSearchFilter("(uid={0})");
        return factory.createAuthenticationManager();
    }
 }
이것은 물론 구성의 LDAP 관련 부분일 뿐입니다. 전체 Java 구성은

여기

에서 찾을 수 있습니다 .

4. XML 구성

 
이제 해당 XML 구성을 살펴보겠습니다.
<authentication-manager>
    <ldap-authentication-provider
      user-search-base="ou=people"
      user-search-filter="(uid={0})"
      group-search-base="ou=groups"
      group-search-filter="(member={0})">
    </ldap-authentication-provider>
</authentication-manager>
   
<ldap-server root="dc=baeldung,dc=com" ldif="users.ldif"/>
다시 말하지만 이것은 구성의 일부일 뿐입니다. 즉, LDAP와 관련된 부분입니다. 전체 XML 구성은

여기

에서 찾을 수 있습니다 .

5. LDAP 데이터 교환 형식

 
LDAP 데이터는 LDIF(LDAP 데이터 교환 형식)를 사용하여 표시할 수 있습니다. 다음은 사용자 데이터의 예입니다.
dn: ou=groups,dc=baeldung,dc=com
objectclass: top
objectclass: organizationalUnit
ou: groups

dn: ou=people,dc=baeldung,dc=com
objectclass: top
objectclass: organizationalUnit
ou: people

dn: uid=baeldung,ou=people,dc=baeldung,dc=com
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
cn: Jim Beam
sn: Beam
uid: baeldung
userPassword: password

dn: cn=admin,ou=groups,dc=baeldung,dc=com
objectclass: top
objectclass: groupOfNames
cn: admin
member: uid=baeldung,ou=people,dc=baeldung,dc=com

dn: cn=user,ou=groups,dc=baeldung,dc=com
objectclass: top
objectclass: groupOfNames
cn: user
member: uid=baeldung,ou=people,dc=baeldung,dc=com

6. 스프링 부트 사용하기

 

Spring Boot 프로젝트에서 작업할 때 LdapContextSource  및  LdapTemplate  을  자동으로 계측  하는 Spring Boot Starter Data Ldap 의존성을 사용할 수도 있습니다 . 

 자동 구성을 활성화하려면 pom.xml에서 의존성으로 정의된

spring-boot-starter-data-ldap

 Starter 또는 

spring-ldap-core

가 있는지 확인해야 합니다  .
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-ldap</artifactId>
</dependency>
LDAP에 연결하려면 application.properties에 연결 설정을 제공해야 합니다.
spring.ldap.url=ldap://localhost:18889
spring.ldap.base=dc=example,dc=com
spring.ldap.username=uid=admin,ou=system
spring.ldap.password=secret
Spring Data LDAP 자동 구성에 대한 자세한 내용은 

공식 문서

에서 찾을 수 있습니다 . Spring Boot는  필요한 서비스 클래스에 주입할 수 있는 LdapTemplate   의 계측을 처리하는 

LdapAutoConfiguration 을 가져옵니다.

@Autowired
private LdapTemplate ldapTemplate;

7. Application

 
마지막으로 간단한 애플리케이션은 다음과 같습니다.
@Controller
public class MyController {

    @RequestMapping("/secure")
    public String secure(Map<String, Object> model, Principal principal) {
        model.put("title", "SECURE AREA");
        model.put("message", "Only Authorized Users Can See This Page");
        return "home";
    }
}

8. 결론

 
LDAP를 사용한 Spring Security에 대한 이 빠른 사용방법(예제)에서 LDIF로 기본 시스템을 프로비저닝하고 해당 시스템의 Security을 구성하는 방법을 배웠습니다.
이 예제의 전체 구현은 GitHub 프로젝트에서 찾을 수 있습니다. 이것은

Eclipse

기반

프로젝트이므로 가져오기 및 그대로 실행하기 쉬워야 합니다.
Security footer banner