This application is an authentication API for user management with password recovery via email, built using Spring Boot and JWT for authentication. Its goal is to provide a secure system for user registration, login, password recovery, and reset.
- User registration with email and password validation
- Login with JWT authentication
- Password recovery with email link delivery
- Password reset via link with a temporary token
- Field validation and error handling
- Java 17
- Spring Boot 3 (Spring Security, Spring Data JPA, Spring Mail)
- PostgreSQL (relational database)
- JWT for authentication
- Mailtrap (for email testing)
- BCrypt for password hashing
- Maven for dependency management
login_app/
├── .mvn/ # Maven folder (Maven configurations)
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── dev/
│ │ │ └── mspilari/
│ │ │ └── login_app/
│ │ │ ├── configs/ # Security, authentication, etc., configurations
│ │ │ ├── domains/ # Application's main domains
│ │ │ │ ├── email/ # Email-related logic
│ │ │ │ └── user/ # User-related logic
│ │ │ ├── exceptions/ # Custom exceptions and error handling
│ │ │ └── utils/ # Utilities and helpers
│ │ └── resources/ # Resources (e.g., configuration files)
│ └── test/ # Application tests
├── target/ # Compilation output folder generated by Maven
├── .gitattributes # Git attributes configuration
├── .gitignore # Git ignore file
├── docker-compose.yaml # Docker Compose configuration
├── HELP.md # Project help documentation
├── mvnw # Maven Wrapper script for Linux
├── mvnw.cmd # Maven Wrapper script for Windows
└── pom.xml # Maven configuration file
configs/
: Contains project configurations, likely related to security (e.g., JWT, authentication).domains/
: Application domain logic, including classes foremail
anduser
functionalities.exceptions/
: Handles custom exceptions for better error management.utils/
: General utilities to support various functionalities.
- Java 17+
- PostgreSQL (create a database for the application and configure credentials in
application.properties
) - Mailtrap for capturing emails in the development environment (or another SMTP service)
Configure your database credentials in the application.properties
file:
spring.datasource.url=jdbc:postgresql://localhost:5432/<DATABASE_NAME>
spring.datasource.username=<USERNAME>
spring.datasource.password=<PASSWORD>
Set your Mailtrap or other SMTP service credentials in the env.properties
file:
spring.mail.username=<MAILTRAP_USERNAME>
spring.mail.password=<MAILTRAP_PASSWORD>
Note: The env.properties
file is imported in application.properties
using the line spring.config.import=classpath:env.properties
.
JWT public and private keys are loaded in application.properties
. Place your keys in the resources
folder as public.key
and private.key
, and configure the properties:
jwt.public.key=classpath:public.key
jwt.private.key=classpath:private.key
Define the expiration time for the JWT token and the password reset token (in seconds):
jwt.expiration=300
token.expiration.seconds=300
-
Clone the repository:
git clone https://github.com/MSpilari/spring_login.git cd login_app
-
Compile and run the application with Maven:
./mvnw spring-boot:run
-
The application will be available at
http://localhost:8080
.
- POST
/user/register
: Creates a new user. Body:{ "email": "user@example.com", "password": "password" }
- POST
/user/#
: Logs in and returns a JWT token. Body:{ "email": "user@example.com", "password": "password" }
- POST
/user/redeem-password
: Sends an email for password reset. Body:{ "email": "user@example.com" }
- POST
/user/reset-password
: Resets the password using a reset token. Body:{ "token": "reset_token", "password": "newPassword" }
-
Success
{ "message": "User created successfully" }
-
Error
{ "errorMessage": "Invalid login credentials", "errorStatusCode": "400 BAD_REQUEST" }
The system handles specific exceptions for validation and authentication, providing user-friendly messages with the appropriate HTTP status code.
- Implementation of differentiated roles and more granular access permissions
- Detailed logging for auditing and security analysis
- Integration with a secret management system for sensitive variables in production
Contributions are welcome! Follow the steps for creating pull requests and review.
Esta aplicação é uma API de autenticação para gerenciamento de usuários com recuperação de senha via email, utilizando Spring Boot e JWT para autenticação. O objetivo é fornecer um sistema seguro de registro, login, recuperação e redefinição de senha.
- Registro de usuários com validação de email e senha
- Login com autenticação JWT
- Recuperação de senha com envio de link por email
- Redefinição de senha via link com token temporário
- Validação de campos e manipulação de erros
- Java 17
- Spring Boot 3 (Spring Security, Spring Data JPA, Spring Mail)
- PostgreSQL (banco de dados relacional)
- JWT para autenticação
- Mailtrap (para simulação de envio de emails)
- BCrypt para hashing de senhas
- Maven para gerenciamento de dependências
login_app/
├── .mvn/ # Pasta do Maven (configurações do Maven)
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── dev/
│ │ │ └── mspilari/
│ │ │ └── login_app/
│ │ │ ├── configs/ # Configurações de segurança, autenticação, etc.
│ │ │ ├── domains/ # DomÃnios principais da aplicação
│ │ │ │ ├── email/ # Lógica relacionada a email
│ │ │ │ └── user/ # Lógica relacionada ao usuário
│ │ │ ├── exceptions/ # Exceções personalizadas e tratamento de erros
│ │ │ └── utils/ # Utilitários e helpers
│ │ └── resources/ # Recursos (ex: arquivos de configuração)
│ └── test/ # Testes da aplicação
├── target/ # Pasta de compilação gerada pelo Maven
├── .gitattributes # Configurações de atributos Git
├── .gitignore # Arquivo para ignorar arquivos no Git
├── docker-compose.yaml # Configuração Docker Compose
├── HELP.md # Documentação de ajuda do projeto
├── mvnw # Script Maven Wrapper para Linux
├── mvnw.cmd # Script Maven Wrapper para Windows
└── pom.xml # Arquivo de configuração Maven
configs/
: Contém configurações do projeto, provavelmente relacionadas à segurança (ex.: JWT, autenticação).domains/
: Estrutura de domÃnio da aplicação, onde estão as classes e lógicas especÃficas paraemail
euser
(usuário).exceptions/
: Contém classes para tratamento de exceções personalizadas, melhorando o controle de erros.utils/
: Utilitários gerais que auxiliam em diversas funcionalidades.
- Java 17+
- PostgreSQL (crie um banco de dados para a aplicação e configure as credenciais em
application.properties
) - Mailtrap para captura de emails em ambiente de desenvolvimento (ou outro serviço SMTP)
Configure as credenciais do banco de dados no arquivo application.properties
:
spring.datasource.url=jdbc:postgresql://localhost:5432/<NOME_DO_BANCO>
spring.datasource.username=<USUARIO>
spring.datasource.password=<SENHA>
Utilize suas credenciais do Mailtrap ou outro serviço de SMTP no arquivo env.properties
:
spring.mail.username=<USUARIO_MAILTRAP>
spring.mail.password=<SENHA_MAILTRAP>
Obs: env.properties
é importado no application.properties
com a linha spring.config.import=classpath:env.properties
.
As chaves públicas e privadas do JWT são carregadas no application.properties
. Coloque suas chaves nos arquivos public.key
e private.key
na pasta resources
, e assegure-se de configurar as propriedades:
jwt.public.key=classpath:public.key
jwt.private.key=classpath:private.key
Defina o tempo de expiração do token JWT e o tempo de expiração do token de redefinição de senha (em segundos):
jwt.expiration=300
token.expiration.seconds=300
-
Clone o repositório:
git clone https://github.com/MSpilari/spring_login.git cd login_app
-
Compile e execute a aplicação com o Maven:
./mvnw spring-boot:run
-
A aplicação estará disponÃvel em
http://localhost:8080
.
- POST
/user/register
: Cria um novo usuário. Corpo:{ "email": "user@example.com", "password": "password" }
- POST
/user/#
: Faz login e retorna um token JWT. Corpo:{ "email": "user@example.com", "password": "password" }
- POST
/user/redeem-password
: Envia um email para redefinição de senha. Corpo:{ "email": "user@example.com" }
- POST
/user/reset-password
: Redefine a senha com base em um token de redefinição. Corpo:{ "token": "token_redefinicao", "password": "novaSenha" }
-
Sucesso
{ "message": "User created successfully" }
-
Erro
{ "errorMessage": "Invalid login credentials", "errorStatusCode": "400 BAD_REQUEST" }
O sistema lida com exceções especÃficas para validação e autenticação, lançando mensagens amigáveis com o código de status HTTP correspondente.
- Implementação de roles diferenciadas e permissões de acesso mais granulares
- Logging detalhado para auditoria e análise de segurança
- Integração com um sistema de gerenciamento de segredos para variáveis sensÃveis em produção
Contribuições são bem-vindas! Siga os passos para criação de pull requests e revisão.