Guia do Spring Data LDAP
1. Introdução
Neste artigo,we’ll focus on Spring Data LDAP integration and configuration. Para uma introdução passo a passo ao Spring LDAP, dê uma olhada rápida emthis article.
Além disso, você pode encontrar a visão geral do guiahere do Spring Data JPA.
2. Maven Dependência
Vamos começar adicionando as dependências necessárias do Maven:
org.springframework.data
spring-data-ldap
1.0.6.RELEASE
As versões mais recentes podem ser encontradas aqui paraspring-data-ldap.
3. Entrada de Domínio
O projeto Spring LDAP fornece a capacidade de mapear entradas LDAP para objetos Java usandoObject-Directory Mapping (ODM).
Vamos definir a entidade que será usada para mapear os diretórios LDAP que já foram configurados emSpring LDAP article.
@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 é semelhante a@Entity (de JPA / ORM) que é usado para especificar qual entidade mapeia para a raiz do diretório das entradas LDAP.
Uma classeEntry deve ter a anotação@Id declarada em um campo do tipo javax.naming.Name que representa a entidadeDN. A anotação@Attribute é usada para mapear campos de classe de objeto para campos de entidade.
4. Repositório de Dados Spring
O Spring Data Repository é uma abstração que fornece implementação básica pronta para uso, pronta para uso, de camadas de acesso a dados para vários armazenamentos de persistência.
Spring Framework internally provides the implementation of CRUD operations para determinada classe no repositório de dados. Podemos encontrar os detalhes completos no artigoIntroduction to Spring Data JPA.
Spring Data LDAP fornece abstração semelhante que fornece a implementação automática de interfacesRepository que incluem operação CRUD básica para diretórios LDAP.
Além disso, o Spring Data Framework pode criar umcustom query com base no nome de um método.
Vamos definir nossa interface de repositório que será usada para gerenciarUser Entry:
@Repository
public interface UserRepository extends LdapRepository {
User findByUsername(String username);
User findByUsernameAndPassword(String username, String password);
List findByUsernameLikeIgnoreCase(String username);
}
Como podemos ver, declaramos uma interface estendendoLdapRepository para a entradaUser. Spring Data Framework fornecerá automaticamente a implementação do método CRUD básico, comofind(),findAll(),save(),delete(), etc.
Além disso, declaramos alguns métodos personalizados. O Spring Data Framework fornecerá a implementação investigando o nome do método com uma estratégia conhecida comoQuery Builder Mechanism.
5. Configuração
Podemos configurar Spring Data LDAP usando classes@Configuration baseadas em Java ou um namespace XML. Vamos configurar o repositório usando a abordagem baseada em Java:
@Configuration
@EnableLdapRepositories(basePackages = "com.example.ldap.**")
public class AppConfig {
}
@EnableLdapRepositories dicas do Spring para verificar o pacote fornecido em busca de interfaces marcadas como@Repository.
6. Logíca de negócios
Vamos definir nossa classe de serviço que usaráUserRepository para operar em diretórios LDAP:
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
// business methods
}
Agora, exploraremos uma ação de cada vez e veremos com que facilidade podemos realizar essas ações usando o Spring Data Repository
6.1. Autenticação de usuário
Vamos agora implementar uma peça simples de lógica para autenticar um usuário existente:
public Boolean authenticate(String u, String p) {
return userRepository.findByUsernameAndPassword(u, p) != null;
}
6.2. Criação de usuário
A seguir, vamos criar um novo usuário e armazenar um hash de senha:
public void create(String username, String password) {
User newUser = new User(username,digestSHA(password));
newUser.setId(LdapUtils.emptyLdapName());
userRepository.save(newUser);
}
6.3. Modificação do usuário
Podemos modificar um usuário ou entrada existente com o seguinte método:
public void modify(String u, String p) {
User user = userRepository.findByUsername(u);
user.setPassword(p);
userRepository.save(user);
}
6.4. Pesquisa de usuário
Podemos procurar usuários existentes usando um método personalizado:
public List search(String u) {
List userList = userRepository
.findByUsernameLikeIgnoreCase(u);
if (userList == null) {
return Collections.emptyList();
}
return userList.stream()
.map(User::getUsername)
.collect(Collectors.toList());
}
7. Exemplo em ação
Por fim, podemos testar rapidamente um cenário de autenticação simples:
@Test
public void givenLdapClient_whenCorrectCredentials_thenSuccessfulLogin() {
Boolean isValid = userService.authenticate(USER3, USER3_PWD);
assertEquals(true, isValid);
}
8. Conclusão
Este tutorial rápido demonstrou o básico da configuração do repositório Spring LDAP e da operação CRUD.
O exemplo usado neste artigo pode ser encontradoover on GitHub.