Esta é uma demonstração do uso de JWT (JSON Web Token) com Spring Security e Spring Boot . Reescrevi completamente minha primeira versão. Agora esta solução é baseada na base de código do Projeto JHipster. Tentei extrair a configuração e as classes mínimas necessárias para a autenticação JWT e fiz algumas alterações.
Esta demonstração foi construída com Maven 3.6.x e Java 11.
Basta iniciar o aplicativo com o plugin Spring Boot maven ( mvn spring-boot:run
). O aplicativo está sendo executado em http://localhost:8080.
Você pode usar o H2-Console para explorar o banco de dados em http://localhost:8080/h2-console:
Existem três contas de usuário presentes para demonstrar os diferentes níveis de acesso aos endpoints na API e as diferentes exceções de autorização:
Admin - admin:admin
User - user:password
Disabled - disabled:password (this user is deactivated)
Existem quatro endpoints que são razoáveis para a demonstração:
/api/authenticate - authentication endpoint with unrestricted access
/api/user - returns detail information for an authenticated user (a valid JWT token must be present in the request header)
/api/persons - an example endpoint that is restricted to authorized users with the authority 'ROLE_USER' (a valid JWT token must be present in the request header)
/api/hiddenmessage - an example endpoint that is restricted to authorized users with the authority 'ROLE_ADMIN' (a valid JWT token must be present in the request header)
Eu escrevi um pequeno cliente Javascript e coloquei alguns comentários no código que espero tornar esta demonstração compreensível. Você pode encontrá-lo em /src/main/resources/static/js/client.js.
Estou usando o bcrypt para codificar senhas. Você pode gerar seus hashes com esta ferramenta simples: Bcrypt Generator
Na verdade, esta demonstração usa um banco de dados H2 incorporado que é configurado automaticamente pelo Spring Boot. Se você deseja se conectar a outro banco de dados, você deve especificar a conexão em application.yml no diretório de recursos. Aqui está um exemplo para um banco de dados MySQL:
spring:
jpa:
hibernate:
# possible values: validate | update | create | create-drop
ddl-auto: create-drop
datasource:
url: jdbc:mysql://localhost/myDatabase
username: myUser
password: myPassword
driver-class-name: com.mysql.jdbc.Driver
Dica: Para outros bancos de dados como MySQL, as sequências não funcionam para geração de ID. Então você tem que mudar o GenerationType nos beans de entidade para 'AUTO' ou 'IDENTITY'.
Você pode encontrar uma referência de todas as propriedades do aplicativo aqui.
#81
Este projeto possui uma imagem docker. Você pode encontrá-lo em https://hub.docker.com/r/hubae/jwt-spring-security-demo/.
Se você tiver dúvidas relacionadas ao projeto, dê uma olhada nas perguntas anteriores ou crie um novo ticket com sua pergunta.
Se você tiver dúvidas que não estejam diretamente relacionadas a este projeto (por exemplo, perguntas comuns sobre Spring Framework ou Spring Security etc.), pesquise na web ou consulte Stackoverflow.
Desculpe por isso, mas estou muito ocupado agora e não tenho muito tempo.
Stephan Zerhusen
O código é lançado sob a licença do MIT.
Fique à vontade para me enviar algum feedback ou perguntas!