Muitas vezes, quando construímos um sistema, criaremos um sistema de gerenciamento de usuários, o que não é difícil para os desenvolvedores. No entanto, quando precisamos manter vários sistemas diferentes e os mesmos usuários são usados nos sistemas, se cada sistema mantiver suas próprias informações do usuário, a sincronização das informações do usuário se tornará mais problemática e será muito problemática para os próprios usuários. É fácil causar senhas inconsistentes de diferentes sistemas. Se introduzirmos o LDAP no momento para armazenar centralmente as informações básicas do usuário e fornecer uma interface de leitura e gravação unificada e mecanismo de verificação, esse problema será mais fácil de resolver. Vamos falar sobre como acessar o servidor LDAP quando usamos a Spring Boot para desenvolver.
Introdução ao LDAP
LDAP (protocolo de acesso ao diretório leve) é um serviço de informações que fornece um serviço de diretório. O serviço de diretório é um sistema de banco de dados especial que é otimizado especificamente para operações de leitura, navegação e pesquisa. Os diretórios são geralmente usados para conter informações descritivas, baseadas em atributos e suportar recursos de filtragem finos e complexos. Os diretórios geralmente não suportam o gerenciamento complexo de transações ou estratégias rotativas para bancos de dados comuns que exigem um grande número de operações de atualização. A atualização dos serviços de diretório geralmente é muito simples. Esse tipo de diretório pode armazenar várias informações, incluindo informações pessoais, links da Web, imagens JPEG etc. Para acessar as informações armazenadas no diretório, é necessário usar o protocolo de acesso - LDAP em execução no TCP/IP.
As informações no diretório LDAP são organizadas de acordo com uma estrutura de árvore e as informações específicas são armazenadas na estrutura de dados da entrada (entrada). Uma entrada é equivalente a um registro de uma tabela em um banco de dados relacional; Uma entrada é um atributo com o alias dn (nome distinto). O DN é usado para se referir a uma entrada e o DN é equivalente a uma palavra -chave em uma tabela de banco de dados relacional. O atributo consiste em um tipo (tipo) e um ou mais valores (valores), que é equivalente a um campo (campo) em um banco de dados relacional consiste em nomes de campo e tipos de dados. Por uma questão de recuperação, o tipo de LDAP pode ter vários valores, em vez dos campos implementados no banco de dados relacional que requerem redução de redundância de dados deve ser irrelevante. A organização de entradas no LDAP é geralmente organizada de acordo com a localização geográfica e as relações organizacionais, o que é muito intuitivo. O LDAP armazena dados em arquivos e, para melhorar a eficiência, um banco de dados de arquivos baseado em índice pode ser usado em vez de um banco de dados relacional. Um exemplo de tipo é o correio, cujo valor será um endereço de email.
As informações de LDAP são armazenadas em uma estrutura de árvore. A raiz da árvore geralmente define um país (c = cn) ou nome de domínio (dc = com) e, sob ele, uma ou mais organizações (o = acme) ou unidades organizacionais (OU = pessoas). Uma unidade organizacional pode conter informações como todos os funcionários, todas as impressoras do edifício, etc. Além disso, o LDAP suporta o controle de quais atributos podem e devem ser suportados por uma entrada, que é implementada com um atributo especial chamado ObjectClass. O valor do atributo determina algumas das regras que a entrada deve seguir, que especifica quais atribuem a entrada pode e devem conter pelo menos. Por exemplo: a classe de objeto Inetorgperson precisa suportar atributos SN (sobrenome) e CN (nome comum), mas também pode conter atributos opcionais, como email, número de telefone, etc.
Abreviação LDAP
Exemplo de início
Depois de entender os conceitos básicos do LDAP, podemos entendê -los melhor através de um exemplo simples!
Crie um projeto básico de inicialização da primavera (se você ainda não souber, pode consultar estes dois artigos: Introdução 1 ou começar 2)
Apresentando duas dependências importantes no pom.xml
<Depencency> <PuerpId> org.springframework.boot </frugiD> <stifactId> primavera-boot-starter-data-ldap </artifactId> </dependency> <ipeD> <purgiD> com.unboundId </fupidId> <tifactId> unclorld-ldApsdk </cotfactId>
Entre eles, o Spring-Boot-Starter-Data-LDAP é uma implementação da configuração de automação LDAP encapsulada pela inicialização da mola. É baseado no Spring-Data-LDAP para executar operações específicas no servidor LDAP.
O UNLIDID-LDAPSDK é usado principalmente para usar um servidor LDAP incorporado aqui para executar operações de teste, portanto o escopo está definido para testar. Em aplicativos reais, geralmente nos conectamos a um servidor LDAP real e de forma independente, para que essa dependência não seja necessária.
Crie o arquivo LDAP-SERVER.LDIF no diretório SRC/Test/Resources para armazenar os dados básicos do servidor LDAP para que os programas posteriores acessem.
dn: dc=didispace,dc=comobjectClass: topobjectClass: domaindn: ou=people,dc=didispace,dc=comobjectclass: topobjectclass: organizationalUnitou: peopledn: uid=ben,ou=people,dc=didispace,dc=comobjectclass: topobjectclass: personobjectclass: organizationalPersonobjectclass: inetorgPersonCn: Didisn: Zhaiyongchaouid: didiSerPassword: {sha} nfcebwjxfalbhhg1qk5uu4trbvq =Um usuário básico é criado aqui, com o nome real Zhaiyongchao e o nome comumente usado DIDI. No programa subsequente, leremos essas informações. Para obter mais explicações de conteúdo, você pode aprender em profundidade o LDAP para entendê -lo. Não vou explicar muito aqui.
Adicionando configuração LDAP incorporada no Application.properties
spring.ldap.embedded.ldif = ldap-server.ldifspring.ldap.embedded.base-dn = dc = didispace, dc = com
Use o uso básico do Spring-Data-LDAP para definir o mapeamento de relacionamento entre propriedades no LDAP e as entidades definidas em Java e o repositório correspondente
@Data @entradas (base = "ou = pessoas, dc = diidspace, dc = com", objectClasses = "inetorgperson") @Dnattribute (value = "uid", index = 3) string privada uid; @Attribute (name = "cn") private string Commonname; @Attribute (name = "SN") SURERNAME PRIVADO; private string userpassword;} interface pública PersonRepository estende Crudrepository <Pessoa, nome> {}Após a definição acima, o objeto de pessoa foi mapeado com o conteúdo de armazenamento LDAP. Precisamos usar apenas o PessoaRepository para ler e escrever facilmente o conteúdo LDAP.
Crie um caso de teste de unidade para ler todas as informações do usuário:
@Runwith (springrunner.class) @springboottestPublic Classe ApplicationTests {@AUTOWIRED PERSONEPOSITE PERSONEPOSIENTY PERSONREPOSITE; @Test public void findall () lança Exceção {PERSONREPOSITION.findall (). Foreach (p -> {System.out.println (p);}); }}Depois de iniciar este caso de teste, podemos ver que as informações do usuário que acabaram de ser mantidas no LDAP-server.LDIF são emitidas no console:
01/01/2018
Pessoa (id = uid = ben, ou = pessoas, 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,98,118,81,61)
Adicione um usuário
Com o exemplo iniciante acima, se você puder concluí -lo de forma independente, o objetivo básico de operar LDAP na bota da primavera foi concluído.
Se você conhece os dados da mola o suficiente, não é difícil imaginar que esse subprojeto embaixo dele também deve cumprir a abstração do Repsitório. Portanto, podemos usar o PersonRepository definido acima para implementar facilmente operações, como o código a seguir para adicionar usuários facilmente ao LDAP:
Pessoa pessoa = nova pessoa (); pessoa.setUid ("UID: 1"); pessoa.SetSuername ("AAA"); pessoa.SetCommonname ("AAA"); pessoa.setUserPassword ("123456"); PersonRepository.Save (Pessoa);Se você deseja implementar mais operações, pode consultar a documentação do Spring-Data-LDAP para uso.
Conecte -se ao servidor LDAP
Nos exemplos deste artigo, os servidores LDAP incorporados são usados. De fato, esse método é limitado ao nosso uso de testes e desenvolvimento local. No ambiente real, o servidor LDAP deve ser implantado independentemente.
No pacote de inicialização da primavera, precisamos configurar apenas os seguintes parâmetros para conectar o exemplo acima ao LDAP remoto em vez de LDAP incorporado.
spring.ldap.urls = ldap: // localhost: 1235spring.ldap.base = dc = didispace, dc = comspring.ldap.username = didispacespring.ldap.password = 123456
Código deste artigo
Você pode verificar o diretório Capítulo3-2-10 nos dois repositórios a seguir:
Github: https://github.com/dyc87112/springboot-learning/
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.