Plusieurs fois, lorsque nous construisons un système, nous créerons nous-mêmes un système de gestion des utilisateurs, ce qui n'est pas difficile pour les développeurs. Cependant, lorsque nous devons maintenir plusieurs systèmes différents et que les mêmes utilisateurs sont utilisés entre les systèmes, si chaque système maintient ses propres informations utilisateur, la synchronisation des informations utilisateur deviendra plus gênante, et elle sera très gênante pour les utilisateurs eux-mêmes. Il est facile de provoquer des mots de passe incohérents de différents systèmes. Si nous introduisons LDAP pour le moment pour stocker de manière centralisée les informations de base des utilisateurs et fournir un mécanisme de lecture et d'écriture unifié, alors un tel problème sera plus facile à résoudre. Parlons de la façon d'accéder au serveur LDAP lorsque nous utilisons Spring Boot pour développer.
Introduction à LDAP
LDAP (Lightweight Directory Access Protocol) est un service d'information qui fournit un service d'annuaire. Directory Service est un système de base de données spécial spécialement optimisé pour les opérations de lecture, de navigation et de recherche. Les répertoires sont généralement utilisés pour contenir des informations descriptives basées sur des attributs et prennent en charge les capacités de filtrage fines et complexes. Les répertoires ne prennent généralement pas en charge la gestion des transactions complexes ou les stratégies renouvelables pour les bases de données communes qui nécessitent un grand nombre d'opérations de mise à jour. La mise à jour des services d'annuaire est généralement très simple. Ce type de répertoire peut stocker diverses informations, notamment des informations personnelles, des liens Web, des images JPEG, etc. Afin d'accéder aux informations stockées dans le répertoire, il est nécessaire d'utiliser le protocole d'accès - LDAP en cours d'exécution sur TCP / IP.
Les informations dans le répertoire LDAP sont organisées en fonction d'une structure d'arbre, et les informations spécifiques sont stockées dans la structure de données de l'entrée (entrée). Une entrée équivaut à un enregistrement d'une table dans une base de données relationnelle; Une entrée est un attribut avec l'alias dn (nom distingué). DN est utilisé pour faire référence à une entrée, et DN équivaut à un mot-clé dans une table de base de données relationnelle. L'attribut se compose d'un type (type) et d'une ou plusieurs valeurs (valeurs), qui équivaut à un champ (champ) dans une base de données relationnelle se compose de noms de champ et de types de données. Dans un souci de récupération, le type de LDAP peut avoir plusieurs valeurs, plutôt que les champs implémentés dans la base de données relationnelle qui nécessitent une réduction de la redondance des données doivent être hors de propos. L'organisation des entrées dans LDAP est généralement organisée en fonction de la localisation géographique et des relations organisationnelles, ce qui est très intuitif. LDAP stocke les données dans les fichiers et pour améliorer l'efficacité, une base de données de fichiers basée sur l'index peut être utilisée à la place d'une base de données relationnelle. Un exemple de type est le courrier, dont la valeur sera une adresse e-mail.
Les informations LDAP sont stockées dans une structure d'arbre. La racine de l'arbre définit généralement un pays (c = cn) ou un nom de domaine (dc = com), et en dessous, une ou plusieurs organisations (o = acme) ou des unités organisationnelles (ou = personnes). Une unité organisationnelle peut contenir des informations telles que tous les employés, toutes les imprimantes du bâtiment, etc. En outre, LDAP prend en charge le contrôle des attributs qui peuvent et doivent être pris en charge par une entrée, qui est mise en œuvre avec un attribut spécial appelé ObjectClass. La valeur de l'attribut détermine certaines des règles que l'entrée doit suivre, qui spécifie qui attribue l'entrée peut et doit contenir au moins. Par exemple: la classe d'objets IneTorGerson doit prendre en charge les attributs SN (nom de famille) et CN (nom commun), mais il peut également contenir des attributs facultatifs tels que l'e-mail, le numéro de téléphone, etc.
Abréviation LDAP
Exemple de démarrage
Après avoir compris les concepts de base de LDAP, nous pouvons les comprendre davantage à travers un exemple simple!
Créez un projet de base de démarrage de Spring (si vous ne le savez pas encore, vous pouvez vous référer à ces deux articles: démarrer 1 ou démarrer 2)
Présentation de deux dépendances importantes dans pom.xml
<dependency> <proupId> org.springframework.boot </proupId> <ArtifactId> printemp-boot-starter-data-ldap </retifactid> </pedigency> <Depend> <proupId> com.unboundId </proupId> <Artifactid> Unbound-ldapsdk </ artifactisid> <tcope> Test </cope>
Parmi eux, Spring-Boot-Starter-Data-LDAP est une implémentation de la configuration d'automatisation LDAP encapsulée par Spring Boot. Il est basé sur Spring-Data-LDAP pour effectuer des opérations spécifiques sur le serveur LDAP.
Unboundid-ldapsdk est principalement utilisé pour utiliser un serveur LDAP intégré ici pour effectuer des opérations de test, donc Scope est défini pour tester. Dans les applications réelles, nous nous connectons généralement à un serveur LDAP réel et indépendamment déployé, donc cette dépendance n'est pas nécessaire.
Créez le fichier LDAP-Server.LIF dans le répertoire SRC / Test / Resources pour stocker les données de base du serveur LDAP pour les programmes ultérieurs pour accéder.
DN: DC = Didispace, DC = ComObjectClass: topObjectClass: DomainDn: Ou = People, DC = Didispace, DC = ComObjectClass: TopObjectClass: Organization Unitou: Peopledn: UID = Ben, ou = People, DC = DiSispace, DC = ComObjectClass: TopObjectClass: PersonObjectClass: OrganizationalPerson InetorgPersoncn: Didiisn: zhaiyongchaouid: DidiUserPassword: {sha} nfcebwjxfalbhhg1qk5uu4trbvq =Un utilisateur de base est créé ici, avec le vrai nom Zhaiyongchao et le nom couramment utilisé Didi. Dans le programme ultérieur, nous lirons ces informations. Pour plus d'explications de contenu, vous pouvez apprendre en profondeur LDAP pour le comprendre. Je n'expliquerai pas trop ici.
Ajout de la configuration LDAP intégrée dans Application.Properties
printemps.ldap.embedded.ldif = ldap-server.ldifspring.ldap.embedded.base-dn = dc = didispace, dc = com
Utilisez l'utilisation de base de Spring-Data-LDAP pour définir la cartographie relationnelle entre les propriétés dans LDAP et les entités définies en Java et le référentiel correspondant
@ Data @ entrée (base = "ou = People, dc = diidspace, dc = com", objectClasses = "inetorgPerson") Public classe personne {@id name privé id; @Dnattribute (valeur = "uid", index = 3) chaîne privée UID; @Attribute (name = "CN") String privé CommonName; @Attribute (name = "sn") SURNAME PRIVATE STRING; Private String UserPassword;} Interface publique PersonPository étend CruDrepository <personne, nom> {}Après la définition ci-dessus, l'objet Person a été cartographié avec le contenu de stockage LDAP. Nous n'avons qu'à utiliser PersonRepository pour lire et écrire facilement le contenu LDAP.
Créez un cas de test unitaire pour lire toutes les informations de l'utilisateur:
@Runwith (springrunner.class) @springboottestpublic class applicationTests {@autowired PersonPository PersonRepository; @Test public void findall () lève une exception {PersonRepository.Findall (). ForEach (p -> {System.out.println (p);}); }}Après avoir commencé ce cas de test, nous pouvons voir que les informations utilisateur qui venaient d'être maintenues dans ldap-server.ldif sont sorties dans la console:
2018-01-27 14: 25: 06.283 WARN 73630 --- [Main] osldap.odm.core.impl.objectmetadata: la personne de classe d'entrée doit être déclarée finale
Personne (id = uid = ben, ou = personnes, 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,11,11,53,85,85,52,116,114,98,118,81,61))
Ajouter un utilisateur
Avec l'exemple débutant ci-dessus, si vous pouvez le terminer indépendamment, l'objectif de base de faire fonctionner LDAP dans Spring Boot a été achevé.
Si vous connaissez suffisamment les données de printemps, il n'est pas difficile d'imaginer que ce sous-projet en dessous doit également se conformer à l'abstraction du reploir. Par conséquent, nous pouvons utiliser le PersonRepository défini ci-dessus pour implémenter facilement les opérations, telles que le code suivant pour ajouter facilement des utilisateurs à LDAP:
Personne personne = new personne (); Person.SetUid ("UID: 1"); personne.setsuername ("aaa"); personne.setComonname ("aaa"); personne.SetUserPassword ("123456"); personRepository.save (personne);Si vous souhaitez implémenter plus d'opérations, vous pouvez vous référer à la documentation de Spring-Data-LDAP pour une utilisation.
Connectez-vous au serveur LDAP
Dans les exemples de cet article, des serveurs LDAP intégrés sont utilisés. En fait, cette méthode est limitée à notre utilisation locale de tests et de développement. Dans l'environnement réel, le serveur LDAP doit être déployé indépendamment.
Dans le package Spring Boot, nous avons seulement besoin de configurer les paramètres suivants pour connecter l'exemple ci-dessus au LDAP distant au lieu du LDAP intégré.
spring.ldap.urls = ldap: // localhost: 1235spring.ldap.base = dc = didispace, dc = comspring.ldap.username = didispacespring.ldap.password = 123456
Code de cet article
Vous pouvez consulter le répertoire du chapitre3-2-10 via les deux référentiels suivants:
Github: https://github.com/dyc87112/springboot-learning/
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.