Gids voor Spring Data LDAP

1. Inleiding

In dit artikel, we zullen ons concentreren op Spring Data LDAP-integratie en -configuratie. Bekijk dit artikel voor een stapsgewijze inleiding tot Spring LDAP.

Ook vindt u hier het overzicht van de Spring Data JPA-gids.

2. Maven Afhankelijkheid

Laten we beginnen met het toevoegen van de vereiste Maven-afhankelijkheden:

 org.springframework.data spring-data-ldap 1.0.6.RELEASE 

De laatste versies van spring-data-ldap zijn hier te vinden.

3. Domeininvoer

Spring LDAP-project biedt de mogelijkheid om LDAP-vermeldingen toe te wijzen aan Java-objecten met behulp van Object-Directory Mapping (ODM).

Laten we de entiteit definiëren die zal worden gebruikt om LDAP-directory's toe te wijzen die al zijn geconfigureerd in het Spring LDAP-artikel.

@Entry (base = "ou = gebruikers", objectClasses = {"person", "inetOrgPerson", "top"}) openbare klasse Gebruiker {@Id privénaam-id; private @Attribute (name = "cn") String gebruikersnaam; private @Attribute (name = "sn") String-wachtwoord; // standaard getters / setters}

@Entry is gelijkaardig aan @Entiteit (van JPA / ORM) die wordt gebruikt om te specificeren welke entiteit wordt toegewezen aan de directory-root van de LDAP-vermeldingen.

Een Binnenkomst klasse moet hebben @ID kaart annotatie gedeclareerd op een veld van het type javax.naming.Name die entiteit vertegenwoordigt DN. De @Attribuut annotatie wordt gebruikt om objectklassevelden toe te wijzen aan entiteitsvelden.

4. Spring Data Repository

Spring Data Repository is een abstractie die een kant-en-klare basisimplementatie van gegevenstoegangslagen biedt voor verschillende persistentiestores.

Spring Framework verzorgt intern de implementatie van CRUD-operaties voor een bepaalde klasse in de gegevensrepository. We kunnen de volledige details vinden in het artikel Inleiding tot Spring Data JPA.

Spring Data LDAP biedt een vergelijkbare abstractie die de automatische implementatie van Opslagplaats interfaces die de basis CRUD-bewerking voor LDAP-directory's bevatten.

Spring Data Framework kan ook een aangepaste query maken op basis van de naam van een methode.

Laten we onze repository-interface definiëren die zal worden gebruikt om te beheren Gebruikersinvoer:

@Repository openbare interface UserRepository breidt LdapRepository uit {User findByUsername (String gebruikersnaam); Gebruiker findByUsernameAndPassword (String gebruikersnaam, String wachtwoord); List findByUsernameLikeIgnoreCase (String gebruikersnaam); }

Zoals we kunnen zien, hebben we een interface verklaard door uit te breiden LdapRepository voor binnenkomst Gebruiker. Spring Data Framework biedt automatisch de basisimplementatie van CRUD-methoden, zoals vind(), vind alle(), sparen(),verwijderen (), enz.

We hebben ook enkele aangepaste methoden verklaard. Spring Data Framework zorgt voor de implementatie door de naam van de methode te onderzoeken met een strategie die bekend staat als Query Builder Mechanism.

5. Configuratie

We kunnen Spring Data LDAP configureren op basis van Java @Configuratie klassen of een XML-naamruimte. Laten we de repository configureren met behulp van de op Java gebaseerde benadering:

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

@EnableLdapRepositories hints Spring om het opgegeven pakket te scannen op interfaces die zijn gemarkeerd als @Repository.

6. Bedrijfslogica

Laten we onze serviceklasse definiëren die de UserRepository om te werken met LDAP-directory's:

@Service openbare klasse UserService {@Autowired privé UserRepository userRepository; // bedrijfsmethoden}

Nu zullen we één actie tegelijk onderzoeken en zien hoe gemakkelijk we deze actie kunnen uitvoeren met Spring Data Repository

6.1. Gebruikersverificatie

Laten we nu een eenvoudig stukje logica implementeren om een ​​bestaande gebruiker te verifiëren:

openbare Booleaanse authenticatie (String u, String p) {return userRepository.findByUsernameAndPassword (u, p)! = null; }

6.2. Gebruiker aanmaken

Laten we vervolgens een nieuwe gebruiker maken en de hash van een wachtwoord opslaan:

public void create (String gebruikersnaam, String wachtwoord) {User newUser = nieuwe gebruiker (gebruikersnaam, digestSHA (wachtwoord)); newUser.setId (LdapUtils.emptyLdapName ()); userRepository.save (newUser); }

6.3. Gebruikerswijziging

We kunnen een bestaande gebruiker of invoer wijzigen met de volgende methode:

openbare ongeldige wijziging (String u, String p) {User user = userRepository.findByUsername (u); user.setPassword (p); userRepository.save (gebruiker); }

6.4. Gebruiker zoeken

We kunnen naar bestaande gebruikers zoeken met behulp van een aangepaste methode:

openbare lijst zoeken (String u) {Lijst userList = userRepository .findByUsernameLikeIgnoreCase (u); if (userList == null) {return Collections.emptyList (); } return userList.stream () .map (Gebruiker :: getUsername) .collect (Collectors.toList ()); }

7. Voorbeeld in actie

Ten slotte kunnen we snel een eenvoudig authenticatiescenario testen:

@Test openbare ongeldig gegevenLdapClient_whenCorrectCredentials_thenSuccessfulLogin () {Boolean isValid = userService.authenticate (USER3, USER3_PWD); assertEquals (true, isValid); }

8. Conclusie

Deze korte tutorial demonstreerde de basisprincipes van Spring LDAP-repositoryconfiguratie en CRUD-werking.

Het voorbeeld dat in dit artikel wordt gebruikt, is te vinden op GitHub.