Uma aplicação Spring Boot para gerenciamento de tarefas com autenticação baseada em token JWT e controle de acesso por usuário autenticado.
Este é um projeto de exemplo de uma API RESTful feita com Spring Boot, onde os usuários podem:
- 🔐 Registrar-se e fazer login
- 🔑 Receber um token JWT após autenticação
- 📋 Criar, ler, atualizar e deletar tarefas (CRUD)
- 🔒 Acessar apenas suas próprias tarefas
| Tecnologia | Versão |
|---|---|
| Java | 17+ |
| Spring Boot | 3.4.5 |
| Spring Security | 6.4.5 |
| JWT (jjwt) | 0.11.5 |
| PostgreSQL | 42.7.5 |
| Lombok | 1.18.38 |
| IDE | IntelliJ IDEA |
src/
├── main/
│ ├── java/
│ │ └── com.luiamerico.todoapplication/
│ │ ├── auth/ # Configuração JWT e filtro de segurança
│ │ ├── config/ # Configuração do Spring Security
│ │ ├── controller/ # Controladores REST
│ │ ├── dto/ # Data Transfer Objects (DTOs)
│ │ ├── model/ # Entidades JPA (User, Task)
│ │ ├── repository/ # Interfaces de acesso ao banco
│ │ ├── service/ # Lógica de negócio
│ │ └── utils/ # Utilitários (ex: SecurityUtil)
POST /api/auth/register
POST /api/auth/login
Exemplo de JSON para login:
{
"email": "usuario1@test.com",
"password": "123456"
}Resposta:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.xxxxx..."
}Enviar token no header:
Authorization: Bearer <token>
| Método | Endpoint | Descrição |
|---|---|---|
| GET | /api/tasks | Lista todas as tarefas do usuário logado |
| GET | /api/tasks/{id} | Retorna uma tarefa específica |
| POST | /api/tasks | Cria nova tarefa |
| PUT | /api/tasks/{id} | Atualiza uma tarefa do usuário |
| DELETE | /api/tasks/{id} | Deleta uma tarefa do usuário |
Exemplo de JSON para criar tarefa:
{
"title": "Estudar Spring Boot",
"description": "Criar sistema com segurança JWT",
"completed": false
}- Cada tarefa está associada a um usuário.
- ➡️ Um usuário só pode acessar suas próprias tarefas.
- Qualquer tentativa de acessar tarefas de outro usuário retorna 403 Forbidden.
| Campo | Tipo | Descrição |
|---|---|---|
| id | BIGINT | Chave primária |
| username | VARCHAR | Nome do usuário |
| VARCHAR | Email único | |
| password | VARCHAR | Senha criptografada |
| Campo | Tipo | Descrição |
|---|---|---|
| id | BIGINT | Chave primária |
| title | VARCHAR | Título da tarefa |
| description | VARCHAR | Descrição (opcional) |
| completed | BOOLEAN | Estado da tarefa |
| created_at | VARCHAR | Data de criação |
| due_date | VARCHAR | Data de vencimento |
| user_id | BIGINT | FK para a tabela users |
POST http://localhost:8080/api/auth/register
POST http://localhost:8080/api/auth/login
POST http://localhost:8080/api/tasks
Headers:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.xxxxx...
GET http://localhost:8080/api/tasks