https://github.com/mspilari/spring_login
Login application with user authentication and password recovery features. Includes modules for user management, email notifications, and error handling to ensure secure login and account recovery.
https://github.com/mspilari/spring_login
java jwt-token mailtrap spring-boot spring-data-jpa spring-security
Last synced: 2 months ago
JSON representation
Login application with user authentication and password recovery features. Includes modules for user management, email notifications, and error handling to ensure secure login and account recovery.
- Host: GitHub
- URL: https://github.com/mspilari/spring_login
- Owner: MSpilari
- Created: 2024-11-05T20:10:56.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2025-02-15T15:28:10.000Z (over 1 year ago)
- Last Synced: 2025-02-15T16:28:09.467Z (over 1 year ago)
- Topics: java, jwt-token, mailtrap, spring-boot, spring-data-jpa, spring-security
- Language: Java
- Homepage:
- Size: 27.3 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 🇺🇸 Login Application API
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.
## Features
- 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
## Technologies and Dependencies
- **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
## Project Structure
```plaintext
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
```
### Main Folder Descriptions
- **`configs/`**: Contains project configurations, likely related to security (e.g., JWT, authentication).
- **`domains/`**: Application domain logic, including classes for `email` and `user` functionalities.
- **`exceptions/`**: Handles custom exceptions for better error management.
- **`utils/`**: General utilities to support various functionalities.
## Prerequisites
- **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)
## Configuration
### Database
Configure your database credentials in the `application.properties` file:
```properties
spring.datasource.url=jdbc:postgresql://localhost:5432/
spring.datasource.username=
spring.datasource.password=
```
### SMTP (Mailtrap)
Set your Mailtrap or other SMTP service credentials in the `env.properties` file:
```properties
spring.mail.username=
spring.mail.password=
```
**Note:** The `env.properties` file is imported in `application.properties` using the line `spring.config.import=classpath:env.properties`.
### JWT
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:
```properties
jwt.public.key=classpath:public.key
jwt.private.key=classpath:private.key
```
### Expiration Settings
Define the expiration time for the JWT token and the password reset token (in seconds):
```properties
jwt.expiration=300
token.expiration.seconds=300
```
## Running the Project
1. Clone the repository:
```bash
git clone https://github.com/MSpilari/spring_login.git
cd login_app
```
2. Compile and run the application with Maven:
```bash
./mvnw spring-boot:run
```
3. The application will be available at `http://localhost:8080`.
## API Endpoints
### Authentication
- **POST** `/user/register`: Creates a new user. **Body:** `{ "email": "user@example.com", "password": "password" }`
- **POST** `/user/login`: Logs in and returns a JWT token. **Body:** `{ "email": "user@example.com", "password": "password" }`
### Password Recovery
- **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" }`
### Example Responses
- **Success**
```json
{ "message": "User created successfully" }
```
- **Error**
```json
{
"errorMessage": "Invalid login credentials",
"errorStatusCode": "400 BAD_REQUEST"
}
```
## Exceptions and Error Handling
The system handles specific exceptions for validation and authentication, providing user-friendly messages with the appropriate HTTP status code.
## Future Improvements
- 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
## Contribution
Contributions are welcome! Follow the steps for creating pull requests and review.
---
# 🇧🇷 Login Application API
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.
## Funcionalidades
- 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
## Tecnologias e Dependências
- **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
## Estrutura do Projeto
```plaintext
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
```
### Descrição das Pastas Principais
- **`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 para `email` e `user` (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.
## Pré-requisitos
- **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)
## Configuração
### Banco de Dados
Configure as credenciais do banco de dados no arquivo `application.properties`:
```properties
spring.datasource.url=jdbc:postgresql://localhost:5432/
spring.datasource.username=
spring.datasource.password=
```
### SMTP (Mailtrap)
Utilize suas credenciais do Mailtrap ou outro serviço de SMTP no arquivo `env.properties`:
```properties
spring.mail.username=
spring.mail.password=
```
**Obs:** `env.properties` é importado no `application.properties` com a linha `spring.config.import=classpath:env.properties`.
### JWT
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:
```properties
jwt.public.key=classpath:public.key
jwt.private.key=classpath:private.key
```
### Configuração do Tempo de Expiração
Defina o tempo de expiração do token JWT e o tempo de expiração do token de redefinição de senha (em segundos):
```properties
jwt.expiration=300
token.expiration.seconds=300
```
## Executando o Projeto
1. Clone o repositório:
```bash
git clone https://github.com/MSpilari/spring_login.git
cd login_app
```
2. Compile e execute a aplicação com o Maven:
```bash
./mvnw spring-boot:run
```
3. A aplicação estará disponÃvel em `http://localhost:8080`.
## Endpoints da API
### Autenticação
- **POST** `/user/register`: Cria um novo usuário. **Corpo:** `{ "email": "user@example.com", "password": "password" }`
- **POST** `/user/login`: Faz login e retorna um token JWT. **Corpo:** `{ "email": "user@example.com", "password": "password" }`
### Recuperação de Senha
- **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" }`
### Exemplo de Respostas
- **Sucesso**
```json
{ "message": "User created successfully" }
```
- **Erro**
```json
{
"errorMessage": "Invalid login credentials",
"errorStatusCode": "400 BAD_REQUEST"
}
```
## Exceções e Tratamento de Erros
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.
## Melhorias Futuras
- 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ção
Contribuições são bem-vindas! Siga os passos para criação de pull requests e revisão.