1. 소개

이 기사에서는 SpringData LDAP 통합 및 구성에 중점을 둘 것입니다. Spring LDAP에 대한 단계별 소개는 이 기사를 빠르게 살펴보십시오 .

또한 여기에서 SpringData JPA 사용방법(예제)의 개요를 찾을 수 있습니다 .

2. Maven 의존성

필요한 Maven 의존성을 추가하여 시작하겠습니다.

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-ldap</artifactId>
    <version>1.0.6.RELEASE</version>
</dependency>

spring-data-ldap 의 최신 버전은 여기에서 찾을 수 있습니다 .

3. 도메인 입력

Spring LDAP 프로젝트는 ODM (Object-Directory Mapping) 을 사용하여 LDAP 항목을 Java 객체에 매핑하는 기능을 제공합니다 .

Spring LDAP 기사 에 이미 구성되어있는 LDAP 디렉토리를 매핑하는 데 사용할 엔티티를 정의 해 보겠습니다 .

@Entry(
  base = "ou=users", 
  objectClasses = { "person", "inetOrgPerson", "top" })
public class User {
    @Id
    private Name id;
    
    private @Attribute(name = "cn") String username;
    private @Attribute(name = "sn") String password;

    // standard getters/setters
}

@EntryLDAP 항목의 디렉토리 루트에 매핑되는 엔티티를 지정하는 데 사용되는 @Entity (JPA / ORM의) 와 유사 합니다.

항목 이 있어야합니다 클래스 @Id 어노테이션 유형 모두 javax의 필드에 선언 .naming.Name 법인 대표 DN을 . @Attribute의 어노테이션은 개체 필드에 객체 클래스 필드를 매핑하는 데 사용됩니다.

4. 스프링 데이터 저장소

Spring Data Repository는 다양한 지속성 저장소에 대한 데이터 액세스 계층의 구현을 사용할 준비가 된 기본적인 기본 제공을 제공하는 추상화입니다.

Spring Framework는 내부적으로 데이터 저장소의 지정된 클래스에 대한 CRUD 작업 구현을 제공 합니다. 전체 세부 사항은 SpringData JPA 소개 기사 에서 찾을 수 있습니다 .

SpringData LDAP는 LDAP 디렉토리에 대한 기본 CRUD 작업을 포함 하는 Repository 인터페이스 의 자동 구현을 제공하는 유사한 추상화를 제공합니다 .

또한 SpringData Framework는 메서드 이름을 기반으로 사용자 지정 쿼리생성 할 수 있습니다 .

사용자 항목 을 관리하는 데 사용할 저장소 인터페이스를 정의 해 보겠습니다 .

@Repository
public interface UserRepository extends LdapRepository<User> {
    User findByUsername(String username);
    User findByUsernameAndPassword(String username, String password);
    List<User> findByUsernameLikeIgnoreCase(String username);
}

보시다시피 User 항목에 대해 LdapRepository확장하여 인터페이스를 선언했습니다 . Spring 데이터 프레임 워크는 자동적으로 기본 CRUD 메소드 구현을 제공 할 것입니다 ) (발견 , findall은 () , 저장을 () () 삭제

또한 몇 가지 사용자 지정 메서드를 선언했습니다. SpringData Framework는 Query Builder Mechanism으로 알려진 전략으로 메소드 이름을 조사하여 구현을 제공합니다 .

5. 구성

Java 기반 @Configuration 클래스 또는 XML 네임 스페이스를 사용하여 SpringData LDAP를 구성 할 수 있습니다 . Java 기반 접근 방식을 사용하여 저장소를 구성 해 보겠습니다.

@Configuration
@EnableLdapRepositories(basePackages = "com.baeldung.ldap.**")
public class AppConfig {
}

@EnableLdapRepositories는 Spring이 @Repository 로 표시된 인터페이스에 대해 주어진 패키지를 스캔하도록 힌트 합니다.

6. 비즈니스 로직

UserRepository사용하여 LDAP 디렉토리에서 작동 하는 서비스 클래스를 정의 해 보겠습니다 .

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    // business methods
}

이제 한 번에 하나의 작업을 탐색하고 Spring Data Repository를 사용하여 이러한 작업을 얼마나 쉽게 수행 할 수 있는지 살펴 보겠습니다.

6.1. 사용자 인증

이제 기존 사용자를 인증하는 간단한 논리를 구현해 보겠습니다.

public Boolean authenticate(String u, String p) {
    return userRepository.findByUsernameAndPassword(u, p) != null;
}

6.2. 사용자 생성

다음으로 새 사용자를 만들고 암호의 해시를 저장하겠습니다.

public void create(String username, String password) {
    User newUser = new User(username,digestSHA(password));
    newUser.setId(LdapUtils.emptyLdapName());
    userRepository.save(newUser);
}

6.3. 사용자 수정

다음 방법으로 기존 사용자 또는 항목을 수정할 수 있습니다.

public void modify(String u, String p) {
    User user = userRepository.findByUsername(u);
    user.setPassword(p);
    userRepository.save(user);
}

6.4. 사용자 검색

사용자 지정 방법을 사용하여 기존 사용자를 검색 할 수 있습니다.

public List<String> search(String u) {
    List<User> userList = userRepository
      .findByUsernameLikeIgnoreCase(u);
    
    if (userList == null) {
        return Collections.emptyList();
    }

    return userList.stream()
      .map(User::getUsername)
      .collect(Collectors.toList());  
}

7. 실제 사례

마지막으로 간단한 인증 시나리오를 빠르게 테스트 할 수 있습니다.

@Test
public void givenLdapClient_whenCorrectCredentials_thenSuccessfulLogin() {
    Boolean isValid = userService.authenticate(USER3, USER3_PWD);
 
    assertEquals(true, isValid);
}

8. 결론

이 빠른 사용방법(예제)는 Spring LDAP 저장소 구성 및 CRUD 작업의 기본 사항을 보여줍니다.

이 기사에 사용 된 예제 는 GitHub 에서 찾을 수 있습니다 .