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
}
@Entry 는 LDAP 항목의 디렉토리 루트에 매핑되는 엔티티를 지정하는 데 사용되는 @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 에서 찾을 수 있습니다 .
- https://docs.spring.io/spring-framework/docs/current/reference/html
- https://www.baeldung.com/spring-data-ldap
'Java' 카테고리의 다른 글
Spring Security 5.1 클라이언트로 권한 부여 및 토큰 요청 사용자 지정 (0) | 2021.04.10 |
---|---|
Spring LDAP 개요 (0) | 2021.04.10 |
JDBC를 사용한 Spring 세션 (0) | 2021.04.10 |
MongoDB를 사용한 Spring 세션 (0) | 2021.04.09 |
Spring Social을 사용한 보조 Facebook 로그인 (0) | 2021.04.09 |