Muchas veces, cuando construimos un sistema, crearemos un sistema de gestión de usuarios nosotros mismos, lo cual no es difícil para los desarrolladores. Sin embargo, cuando necesitamos mantener múltiples sistemas diferentes y los mismos usuarios se usan en todos los sistemas, si cada sistema mantiene su propia información del usuario, la sincronización de la información del usuario será más problemática, y será muy problemático para los propios usuarios. Es fácil causar contraseñas inconsistentes de diferentes sistemas. Si presentamos LDAP en este momento para almacenar centralmente información básica del usuario y proporcionar una interfaz de lectura y escritura unificada y un mecanismo de verificación, entonces este problema será más fácil de resolver. Hablemos sobre cómo acceder al servidor LDAP cuando usamos Spring Boot para desarrollar.
Introducción a LDAP
LDAP (Protocolo de acceso de directorio ligero) es un servicio de información que proporciona un servicio de directorio. El servicio de directorio es un sistema de base de datos especial que está específicamente optimizado para operaciones de lectura, navegación y búsqueda. Los directorios generalmente se utilizan para contener información descriptiva y basada en atributos y admitir capacidades de filtrado finas y complejas. Los directorios generalmente no admiten la gestión de transacciones complejas o estrategias giratorias para bases de datos comunes que requieren una gran cantidad de operaciones de actualización. La actualización de los servicios de directorio es generalmente muy simple. Este tipo de directorio puede almacenar diversa información, incluida la información personal, los enlaces web, las imágenes JPEG, etc. Para acceder a la información almacenada en el directorio, es necesario utilizar el Protocolo de acceso - LDAP que se ejecuta en TCP/IP.
La información en el directorio LDAP se organiza de acuerdo con una estructura de árbol, y la información específica se almacena en la estructura de datos de la entrada (entrada). Una entrada es equivalente a un registro de una tabla en una base de datos relacional; Una entrada es un atributo con el alias DN (nombre distinguido). DN se utiliza para referirse a una entrada, y DN es equivalente a una palabra clave en una tabla de base de datos relacional. El atributo consiste en un tipo (tipo) y uno o más valores (valores), que es equivalente a un campo (campo) en una base de datos relacional consiste en nombres de campo y tipos de datos. En aras de la recuperación, el tipo en LDAP puede tener múltiples valores, en lugar de los campos implementados en la base de datos relacional que requiere reducir la redundancia de datos debe ser irrelevante. La organización de entradas en LDAP generalmente se organiza de acuerdo con la ubicación geográfica y las relaciones organizacionales, lo cual es muy intuitivo. LDAP almacena datos en archivos, y para mejorar la eficiencia, se puede usar una base de datos de archivos basada en índice en lugar de una base de datos relacional. Un ejemplo de tipo es correo, cuyo valor será una dirección de correo electrónico.
La información LDAP se almacena en una estructura de árbol. La raíz del árbol generalmente define un país (C = CN) o nombre de dominio (DC = Com), y debajo de ella, una o más organizaciones (O = ACME) o unidades organizativas (OU = People). Una unidad organizativa puede contener información como todos los empleados, todas las impresoras en el edificio, etc. Además, LDAP admite el control de qué atributos pueden y deben ser compatibles con una entrada, que se implementa con un atributo especial llamado ObjectClass. El valor del atributo determina algunas de las reglas que la entrada debe seguir, lo que especifica qué atribuye la entrada puede y debe contener al menos. Por ejemplo: la clase de objeto inetorgperson debe admitir atributos SN (apellido) y CN (nombre común), pero también puede contener atributos opcionales como correo electrónico, número de teléfono, etc.
Abreviatura de LDAP
Ejemplo de inicio
Después de comprender los conceptos básicos de LDAP, ¡podemos entenderlos a través de un ejemplo simple!
Cree un proyecto básico de arranque de primavera (si aún no lo sabe, puede consultar estos dos artículos: comenzar 1 o comenzar 2)
Introducción de dos dependencias importantes en pom.xml
<Spendency> <MoupRoMID> org.springframework.boot </groupid> <artifactId> spring-boot-starter-data-ldap </artifactid> </dependency> <epe> <proupid> com.unboundid </groupId> <AtifactID> unóundididsdapsdk </artifactid> <AceCope> test </scope> </dependiendo>
Entre ellos, Spring-Boot-Starter-Data-LDAP es una implementación de la configuración de automatización LDAP encapsulada por Spring Boot. Se basa en Spring-Data-LDAP para realizar operaciones específicas en el servidor LDAP.
UnboundID-LDAPSDK se usa principalmente para usar un servidor LDAP integrado aquí para realizar operaciones de prueba, por lo que el alcance está configurado para probar. En las aplicaciones reales, generalmente nos conectamos a un servidor LDAP real e independientemente, por lo que no es necesaria esta dependencia.
Cree el archivo LDAP-Server.ldif en el directorio SRC/Test/Resources para almacenar los datos básicos del servidor LDAP para que los programas posteriores accedan.
dn: dc = didispace, dc = comObjectClass: topObjectClass: domainDn: ou = personas, dc = didispace, dc = comObjectClass: topObjectClass: organizationalUnitou: hearledn: uid = ben, ou = personas, dc = didispace, dc = comobjectClass: topobjectclass: personaObjectClass: organizationalpersonObLass: inetorgpersoncn: didisn: zhaiyongchauid: didiuserpassword: {sha} nfcebwjxfalbhhg1qk5uu4trbvq =Aquí se crea un usuario básico, con el nombre real Zhaiyongchao y el nombre de uso común Didi. En el programa posterior, leeremos esta información. Para obtener más explicaciones de contenido, puede aprender LDAP en profundidad para comprenderlo. No explicaré demasiado aquí.
Agregar configuración LDAP integrada en Application.Properties
spring.ldap.embedded.ldif = ldap-server.ldifspring.ldap.embedded.base-dn = dc = didispace, dc = com
Use el uso básico de Spring-Data-LDAP para definir el mapeo de relaciones entre las propiedades en LDAP y las entidades definidas en Java y el repositorio correspondiente
@Data @entry (base = "ou = personas, dc = diidspace, dc = com", objectClasses = "inetorgperson") persona de clase pública {@id private nombre id; @Dnattribute (valor = "uid", index = 3) String private uid; @Attribute (name = "CN") String privado CommonName; @Attribute (name = "Sn") Private String Suername; Private String UserPassword;} Public Interface PersonRepository extiende CrudRepository <Person, Name> {}Después de la definición anterior, el objeto de persona se ha asignado con el contenido de almacenamiento LDAP. Solo necesitamos usar PersonRepository para leer y escribir fácilmente el contenido LDAP.
Cree un caso de prueba unitario para leer toda la información del usuario:
@Runwith (SpringRunner.class) @SpringBoottestPublic AplicationTests {@autewired private PersonRepository PersonRepository; @Test public void findall () lanza la excepción {PersonRepository.findall (). Foreach (p -> {System.out.println (p);}); }}Después de comenzar este caso de prueba, podemos ver que la información del usuario que se acaba de mantener en LDAP-server.ldif se emite en la consola:
2018-01-27 14: 25: 06.283 Warn 73630 --- [Main] Osldap.odm.core.impl.objectMetadata: la persona de la clase de entrada debe declararse final
Persona (id = uid = ben, ou = personas, dc = didispace, dc = com, uid = ben, comunesname = 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,181,61)
Agregar un usuario
Con el ejemplo de principiante anterior, si puede completarlo de forma independiente, se ha completado el objetivo básico de operar LDAP en Spring Boot.
Si conoce los datos de Spring lo suficiente, no es difícil imaginar que este subproyecto bajo él también debe cumplir con la abstracción repsitoria. Por lo tanto, podemos usar la persona de la persona definida anteriormente para implementar fácilmente operaciones, como el siguiente código para agregar fácilmente los usuarios a LDAP:
Persona persona = nueva persona (); persona.setUid ("uid: 1"); persona.setsuername ("aaa"); persona.setCommonName ("AAA"); persona.setuserpassword ("123456"); PersonRepository.save (persona);Si desea implementar más operaciones, puede consultar la documentación de Spring-Data-LDAP para su uso.
Conectarse al servidor LDAP
En los ejemplos de este artículo, se utilizan servidores LDAP integrados. De hecho, este método se limita a nuestro uso local de pruebas y desarrollo. En el entorno real, el servidor LDAP debe implementarse de forma independiente.
En el paquete de arranque de Spring, solo necesitamos configurar los siguientes parámetros para conectar el ejemplo anterior al LDAP remoto en lugar de LDAP incrustado.
spring.ldap.urls = ldap: // localhost: 1235spring.ldap.base = dc = didispace, dc = comspring.ldap.username = didispacesspring.ldap.password = 123456
Código de este artículo
Puede consultar el directorio del Capítulo 3-2-10 a través de los siguientes dos repositorios:
Github: https://github.com/dyc87112/springboot-lelarning/
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.