Este é um projeto de API REST com Spring Boot para autenticação de usuários e geração, verificação e gerenciamento de JWT (JSON Web Token). A API permite o registro de novos usuários, login e verificação de tokens JWT. O projeto já inclui integração com banco de dados MySQL para persistência de dados e controle de acesso baseado em papéis de usuário (ex.: ADMIN, USER).
- Registro de Usuário: Registra novos usuários com nome de usuário e senha no banco de dados.
- Login de Usuário: Autentica os usuários com base em suas credenciais e retorna um token JWT.
- Verificação de Token: Verifica se um token JWT é válido.
- Controle de Acesso por Papéis: Atribuição de papéis aos usuários durante o registro (ex.: ADMIN, USER) para controlar o acesso a determinadas funcionalidades.
- Persistência no Banco de Dados MySQL: Os dados dos usuários são armazenados em um banco de dados MySQL.
- Teste de API via interface gráfica: Você pode testar a API usando uma interface gráfica Swagger.
- URL:
/register - Método:
POST - Descrição: Registra um novo usuário e retorna um token JWT.
- Corpo da Requisição (JSON):
{
"username": "seu_nome_de_usuário",
"password": "sua_senha"
}- Resposta (Sucesso):
{
"token": "seu_token_jwt_gerado"
}- Resposta (Erro - Nome de usuário já registrado):
"Nome de usuário já está em uso"- URL: /auth
- Método: POST
- Descrição: Autentica o usuário e retorna um token JWT se as credenciais forem válidas.
- Corpo da Requisição (JSON):
{
"username": "seu_nome_de_usuário",
"password": "sua_senha"
}- Resposta (Sucesso):
{
"token": "seu_token_jwt_gerado"
}- Resposta (Erro - Credenciais inválidas):
"Credenciais inválidas!"- URL: /verifyToken
- Método: POST
- Descrição: Verifica se o token JWT fornecido é válido.
- Corpo da Requisição (JSON):
{
"token": "seu_token_jwt"
}- Resposta (Token Válido):
"Token é válido!"Resposta (Token Inválido ou Expirado):
"Token inválido ou expirado!"O projeto contém os seguintes componentes:
Gerencia os endpoints da API para registro, login e verificação de tokens.
Gerencia o registro de usuários, login e validação de senhas.
Responsável pela geração e validação de tokens JWT.
Objetos de Transferência de Dados (DTO) como LoginRequest, TokenRequest, e AuthResponse para requisições e respostas de usuários.
Repositório para persistência e consulta de usuários no banco de dados MySQL.
Uso de PasswordEncoder para criptografia de senhas.
Antes de construir e executar o projeto, certifique-se de ter instalado o seguinte:
- JDK 8 ou superior
- Maven (para construir e executar o projeto)
- Banco de dados MySQL (para persistência de usuários)
git clone https://github.com/seu-usuario/seu-repositorio.git
cd seu-repositorioConfigure o arquivo application.properties ou application.yml com as credenciais e URL do seu banco de dados MySQL:
Exemplo application.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/nome_do_banco
spring.datasource.username=seu_usuario
spring.datasource.password=sua_senha
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5DialectUse o Maven para construir o projeto:
mvn clean installApós a construção bem-sucedida, você pode executar a aplicação Spring Boot com:
mvn spring-boot:run- Ou usando o arquivo JAR gerado:
java -jar target/seu-projeto-0.0.1-SNAPSHOT.jarPara rodar os testes unitários, use o seguinte comando Maven:
mvn testVocê pode testar a API usando ferramentas como Postman ou curl. Abaixo estão exemplos de comandos curl para testar os endpoints.
##Registrar um Usuário
curl -X POST http://localhost:8080/auth/register \
-H "Content-Type: application/json" \
-d '{"username": "seu_nome_de_usuário", "password": "sua_senha"}'curl -X POST http://localhost:8080/auth/login \
-H "Content-Type: application/json" \
-d '{"username": "seu_nome_de_usuário", "password": "sua_senha"}'curl -X POST http://localhost:8080/auth/verifyToken \
-H "Content-Type: application/json" \
-d '{"token": "seu_token_jwt"}'Este projeto foi configurado com Swagger, logo permitindo testes da API usando a página swagger-ui.html
- Spring Boot Starter Web: Para construir serviços RESTful.
- Spring Boot Starter Security: Para autenticação e criptografia de senhas.
- Spring Boot Starter Data JPA: Para persistência de dados com MySQL.
- JWT (Json Web Token): Para autenticação baseada em tokens.
- MySQL: Banco de dados relacional para armazenamento de dados dos usuários.
- JUnit e Mockito: Para testes unitários.
- Implementar verificação de email para confirmar o registro de novos usuários.
- Adicionar autenticação com dois fatores (2FA).
- Controle de acesso mais refinado baseado em papéis com endpoints exclusivos para ADMIN e USER.
- Melhorar as mensagens de erro com internacionalização (i18n).
Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para mais detalhes.