시스템을 구축 할 때 여러 번 개발자에게는 어렵지 않은 사용자 관리 시스템을 만들 것입니다. 그러나 여러 다른 시스템을 유지해야하고 동일한 사용자가 시스템 전체에서 사용되는 경우 각 시스템이 자체 사용자 정보를 유지하면 사용자 정보의 동기화가 더 번거 롭게되며 사용자 자체가 매우 귀찮게됩니다. 다른 시스템의 일관되지 않은 암호를 쉽게 일으킬 수 있습니다. 현재 LDAP를 소개하여 사용자 기본 정보를 중앙에 저장하고 통합 된 읽기 및 쓰기 인터페이스 및 검증 메커니즘을 제공하는 경우 이러한 문제를 해결하기가 더 쉬워집니다. Spring Boot를 사용하여 개발할 때 LDAP 서버에 액세스하는 방법에 대해 이야기 해 봅시다.
LDAP 소개
LDAP (Lightweight Directory Access Protocol)는 디렉토리 서비스를 제공하는 정보 서비스입니다. 디렉토리 서비스는 읽기, 탐색 및 검색 작업에 특별히 최적화 된 특수 데이터베이스 시스템입니다. 디렉토리는 일반적으로 설명, 속성 기반 정보를 포함하고 미세하고 복잡한 필터링 기능을 지원하는 데 사용됩니다. 디렉토리는 일반적으로 많은 업데이트 작업이 필요한 일반적인 데이터베이스의 복잡한 거래 관리 또는 회전 전략을 지원하지 않습니다. 디렉토리 서비스의 업데이트는 일반적으로 매우 간단합니다. 이러한 종류의 디렉토리는 개인 정보, 웹 링크, JPEG 이미지 등을 포함한 다양한 정보를 저장할 수 있습니다. 디렉토리에 저장된 정보에 액세스하려면 TCP/IP에서 실행하는 액세스 프로토콜 -LDAP를 사용해야합니다.
LDAP 디렉토리의 정보는 트리 구조에 따라 구성되며 특정 정보는 항목 (Entry)의 데이터 구조에 저장됩니다. 항목은 관계형 데이터베이스의 테이블 레코드와 동일합니다. 항목은 별칭 DN (Distinguished Name)의 속성입니다. DN은 항목을 참조하는 데 사용되며 DN은 관계형 데이터베이스 테이블의 키워드와 같습니다. 속성은 유형 (유형)과 하나 이상의 값 (값)으로 구성되며 관계형 데이터베이스의 필드 (필드)와 동일합니다. 검색을 위해 LDAP 유형은 데이터 중복을 줄이는 관계형 데이터베이스에서 구현 된 필드가 아닌 여러 값을 가질 수 있습니다. LDAP의 출품작 조직은 일반적으로 지리적 위치 및 조직 관계에 따라 구성되며, 이는 매우 직관적입니다. LDAP는 파일에 데이터를 저장하고 효율성을 향상시키기 위해 관계형 데이터베이스 대신 인덱스 기반 파일 데이터베이스를 사용할 수 있습니다. 유형의 예는 메일 주소가 될 메일입니다.
LDAP 정보는 트리 구조에 저장됩니다. 트리 루트는 일반적으로 국가 (C = CN) 또는 도메인 이름 (DC = COM)을 정의하고 그 아래에서 하나 이상의 조직 (O = ACME) 또는 조직 단위 (OU = 사람)을 정의합니다. 조직 단위에는 모든 직원, 건물의 모든 프린터 등과 같은 정보가 포함될 수 있습니다. 또한 LDAP는 항목에서 지원할 수있는 속성을 제어하는 것을 지원합니다. 속성의 값은 항목이 따라야하는 일부 규칙 중 일부를 결정하며, 이는 항목이 적어도 포함 할 수있는 속성을 지정하는 것을 지정합니다. 예를 들어, inetorgperson 객체 클래스는 SN (성) 및 CN (공통 이름) 속성을 지원해야하지만 이메일, 전화 번호 등과 같은 선택적 속성을 포함 할 수도 있습니다.
LDAP 약어
시작하기 예
LDAP의 기본 개념을 이해 한 후 간단한 예를 통해이를 더 이해할 수 있습니다!
기본 스프링 부팅 프로젝트 만들기 (아직 모르는 경우,이 두 기사를 참조하십시오 : 시작하기 1 또는 시작하기 2)
pom.xml에 두 가지 중요한 종속성을 소개합니다
<pectionency> <groupId> org.springframework.boot </groupid> <artifactid> 스프링-부트-스타터-라타 -ldap </artifactid> </dependency> <pection> <groupid> com.unboundid </groupid> <artifactid> unitifactid> unboundid-ldapsdk </artifactid> <scope> test </scope>
그 중에서도 Spring-Boot-Starter-Data-LDAP는 Spring Boot가 캡슐화 한 LDAP 자동화 구성을 구현 한 것입니다. LDAP 서버에서 특정 작업을 수행하기 위해 Spring-Data-LDAP를 기반으로합니다.
Unboundid-LdAPSDK는 주로 테스트 작업을 수행하기 위해 임베디드 LDAP 서버를 사용하는 데 사용되므로 스코프는 테스트하도록 설정됩니다. 실제 응용 프로그램에서는 일반적으로 실제 및 독립적으로 배포 된 LDAP 서버에 연결 하므로이 종속성이 필요하지 않습니다.
src/test/resources 디렉토리에서 ldap-server.ldif 파일을 만들려면 나중에 프로그램에 액세스 할 수 있도록 LDAP 서버의 기본 데이터를 저장하십시오.
DN : DC = DIDISPACE, DC = COMOBJECTCLASS : TOPOBJECTCLASS : DOMAINDN : OU = PEOLE, DC = DIDISPACE, DC = COMOBJECTCLASS : TOPOBJECTCLASS : ORGITIONATIONALUNITOU : PEOPLEDN : uid = OU = PEOLE, DC = DIDISPACE, DC = COMOBJECTCLASS : TOPOBLASS : PERONTEBCCLASS : PERONICALCCLASS : PERONIVERCCLASS : PERONIVERCLASS : PERONIVELCCLASS : PERONIVERCLASS : inetorgpersoncn : didisn : zhaiyongchaouid : didiuserpassword : {sha} nfcebwjxfalbhhg1qkk5uu4trbvq =실명 Zhaiyongchao와 일반적으로 사용되는 이름 Didi가있는 기본 사용자가 여기에 생성됩니다. 후속 프로그램에서는이 정보를 읽을 것입니다. 더 많은 콘텐츠 설명을 보려면 LDAP를 심층적으로 배울 수있어 이해할 수 있습니다. 나는 여기서 너무 설명하지 않을 것입니다.
Application.Properties에서 임베디드 LDAP 구성 추가
spring.ldap.embedded.ldif = ldap-server.ldifspring.ldap.embedded.base-dn = dc = didispace, dc = com
Spring-Data-LDAP의 기본 사용법을 사용하여 LDAP의 속성과 Java에 정의 된 엔터티 간의 관계 매핑을 정의하십시오.
@data @entry (base = "ou = people, dc = diidspace, dc = com", ObjectClasses = "inetorgperson") 공개 클래스 사람 {@id private name id; @dnattribute (value = "uid", index = 3) 개인 문자열 uid; @attribute (name = "cn") 개인 문자열 commonname; @attribute (name = "sn") private String suername; private String userPassword;} public interface personrepository 확장 crudrepository <person, name> {}위의 정의 후에, Person Object는 LDAP 스토리지 컨텐츠와 매핑되었습니다. LDAP 컨텐츠를 쉽게 읽고 작성하기 위해 PersonRepository 만 사용하면됩니다.
모든 사용자 정보를 읽을 수있는 단위 테스트 케이스를 작성하십시오.
@RunWith (SpringRunner.class) @SpringBootTestPublic Class ApplicationTests {@autowired 개인 개인 리포피토리 개인 재구성; @test public void findall ()은 예외를 {personrepository.findall (). foreach (p-> {system.out.println (p);}); }}이 테스트 사례를 시작한 후 LDAP-Server.ldif에서 방금 유지 된 사용자 정보가 콘솔에서 출력임을 알 수 있습니다.
2018-01-27 14 : 25 : 06.283 WARN 73630 --- [MAIN] OSLDAP.ODM.CORE.IMPL.OBJECTMETADATA : 입학 클래스 담당자는 최종 선언해야합니다.
person (id = uid = ben, ou = people, dc = didispace, dc = com, uid = ben, commonname = didi, suername = zhaiyongchao, UserPassword = 123,83,72,65,125,110,70,67,101,98,87,106,120,102,97,76,98,72,72,71,49,81,107,53,85,85,52,116,114,118,61).
사용자를 추가하십시오
위의 초보자 예를 통해 독립적으로 완료 할 수 있다면 Spring Boot에서 LDAP를 작동하는 기본 목표가 완료되었습니다.
스프링 데이터를 충분히 알고 있다면, 그 아래 의이 하위 프로젝트도 repsitory 추상화를 준수해야한다고 상상하기 어렵지 않습니다. 따라서 위에서 정의 된 개인 리포지토리를 사용하여 다음 코드와 같은 작업을 쉽게 구현하여 사용자를 LDAP에 쉽게 추가 할 수 있습니다.
사람 = 새로운 사람 (); person.setuid ( "uid : 1"); person.setsuername ( "aaa"); person.setcommonname ( "AAA"); person.setuserpassword ( "123456"); PersonRepository.save (사람);
더 많은 작업을 구현하려면 사용하기 위해 Spring-Data-LDAP의 문서를 참조하십시오.
LDAP 서버에 연결하십시오
이 기사의 예에서는 임베디드 LDAP 서버가 사용됩니다. 실제로이 방법은 지역 테스트 및 개발 사용으로 제한됩니다. 실제 환경에서는 LDAP 서버를 독립적으로 배포해야합니다.
Spring Boot 패키지에서는 위의 예제를 포함 된 LDAP 대신 원격 LDAP에 연결하려면 다음 매개 변수 만 구성하면됩니다.
spring.ldap.urls = ldap : // localhost : 1235spring.ldap.base = dc = dc = didispace, dc = comspring.ldap.username = didispacespring.ldap.password = 123456
이 기사의 코드
다음 두 리포지토리를 통해 3-2-10 디렉토리를 확인할 수 있습니다.
github : https://github.com/dyc87112/springboot-learning/
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.