SecureHub é um sistema de gerenciamento de usuários e autenticação distribuído, construído com arquitetura de microserviços usando Spring Boot, Kafka e PostgreSQL. O projeto implementa funcionalidades completas de autenticação, autorização, gestão de usuários e envio de emails.
O SecureHub é composto por dois microserviços principais:
- Auth Service: Centro de autenticação responsável por gerenciar usuários, autenticação JWT, ativação de contas e recuperação de senhas.
- Mail Sender Service: Serviço responsável pelo envio de emails transacionais via templates Thymeleaf.
O sistema utiliza comunicação assíncrona entre serviços através do Apache Kafka para garantir alta disponibilidade e escalabilidade.
┌─────────────────┐ Kafka ┌─────────────────┐
│ Auth Service │ ──────────► │ Mail Sender │
│ │ │ Service │
│ - Autenticação │ │ - Envio Emails │
│ - Usuários │ │ - Templates │
│ - JWT Tokens │ │ │
└─────────────────┘ └─────────────────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ PostgreSQL │ │ SMTP Server │
│ Database │ │ (Mailtrap) │
└─────────────────┘ └─────────────────┘
- Hexagonal Architecture (Ports & Adapters): Separação clara entre domínio, aplicação e infraestrutura
- Domain-Driven Design (DDD): Organização do código baseada no domínio de negócio
- CQRS Pattern: Separação de comandos e consultas
- Event-Driven Architecture: Comunicação assíncrona via eventos Kafka
- Clean Architecture: Independência de frameworks e tecnologias externas
- ✅ Cadastro de Usuários: Criação de novos usuários com validação
- ✅ Autenticação JWT: Login seguro com tokens JWT
- ✅ Ativação de Conta: Sistema de códigos de ativação por email
- ✅ Recuperação de Senha: Reset de senha via token temporal
- ✅ Autorização: Controle de acesso baseado em roles
- ✅ Segurança: Criptografia de senhas com BCrypt
- ✅ Correlação de Logs: Rastreamento de requisições via correlation ID
- ✅ Envio de Emails: Processamento assíncrono de emails
- ✅ Templates HTML: Suporte a templates Thymeleaf responsivos
- ✅ Retry Logic: Reprocessamento automático em caso de falha
- ✅ Dead Letter Queue: Tratamento de mensagens não processadas
- ✅ Monitoramento: Logs detalhados para auditoria
- Java 25: Linguagem principal
- Spring Boot 3.5.7+: Framework principal
- Spring Security: Autenticação e autorização
- Spring Data JPA: Persistência de dados
- Spring Kafka: Mensageria assíncrona
- JWT (Auth0): Tokens de autenticação
- PostgreSQL 16: Banco principal
- Flyway: Migrations (implícito via Spring Boot)
- Apache Kafka 7.4.4: Message broker
- Zookeeper: Coordenação do Kafka
- JavaMailSender: Envio de emails
- Thymeleaf: Engine de templates
- Mailtrap: SMTP para desenvolvimento
- Maven: Gerenciamento de dependências
- Docker Compose: Orquestração de containers
- Lombok: Redução de boilerplate
- SLF4J + Logback: Sistema de logs
- Java 25 ou superior
- Maven 3.6+
- Docker & Docker Compose
- Git
git clone git@github.com:julioceno/securehub.git
cd securehub# Inicia PostgreSQL, Kafka e Zookeeper
docker-compose up -dCrie um arquivo .env ou configure as seguintes variáveis:
# Mail Sender Service
export MAIL_HOST=sandbox.smtp.mailtrap.io
export MAIL_PORT=2525
export MAIL_USERNAME=your_username
export MAIL_PASSWORD=your_passwordAuth Service:
cd auth
./mvnw spring-boot:runMail Sender Service:
cd mailsender
./mvnw spring-boot:run# Health check do Auth Service
curl http://localhost:8080/v1/ping
# Os logs devem mostrar as aplicações iniciadas1. Criar Usuário:
curl -X POST http://localhost:8080/v1/users \
-H "Content-Type: application/json" \
-d '{
"username": "testuser",
"email": "test@example.com",
"password": "password123"
}'2. Ativar Usuário:
curl -X POST http://localhost:8080/v1/users/enable \
-H "Content-Type: application/json" \
-d '{
"email": "test@example.com",
"code": "123456"
}'3. Fazer Login:
curl -X POST http://localhost:8080/v1/auth \
-H "Content-Type: application/json" \
-d '{
"email": "test@example.com",
"password": "password123"
}'securehub/
├── docker-compose.yml # Orquestração de containers
├── README.md # Documentação
│
├── auth/ # Microserviço de Autenticação
│ ├── pom.xml # Dependências Maven
│ └── src/
│ ├── main/java/com/securehub/auth/
│ │ ├── AuthApplication.java # Main class
│ │ ├── adapters/ # Camada de adaptadores
│ │ │ ├── in/ # Adaptadores de entrada
│ │ │ │ ├── controller/ # REST Controllers
│ │ │ │ │ ├── AuthController.java # Login/Logout
│ │ │ │ │ ├── UsersController.java # CRUD Usuários
│ │ │ │ │ └── PingController.java # Health check
│ │ │ │ ├── dto/ # DTOs de entrada
│ │ │ │ └── filter/ # Filtros HTTP
│ │ │ │ └── JwtAuthenticationFilter.java # Filtro JWT
│ │ │ └── out/ # Adaptadores de saída
│ │ │ ├── entities/ # Entidades JPA
│ │ │ ├── repositories/ # Implementação repositórios
│ │ │ └── kafka/ # Produtores Kafka
│ │ ├── application/ # Camada de aplicação
│ │ │ ├── dto/ # DTOs internos
│ │ │ ├── mapper/ # Mapeadores
│ │ │ ├── port/ # Interfaces/Ports
│ │ │ │ ├── in/ # Use cases
│ │ │ │ └── out/ # Portas de saída
│ │ │ ├── service/ # Implementação use cases
│ │ │ │ ├── auth/ # Serviços de autenticação
│ │ │ │ └── user/ # Serviços de usuário
│ │ │ ├── usecases/ # Interfaces de casos de uso
│ │ │ └── util/ # Utilitários
│ │ ├── domain/ # Camada de domínio
│ │ │ ├── activationCode/ # Domínio códigos ativação
│ │ │ ├── email/ # Domínio emails
│ │ │ ├── passwordResetToken/ # Domínio reset senha
│ │ │ └── user/ # Domínio usuários
│ │ └── infrastructure/ # Camada de infraestrutura
│ │ ├── config/ # Configurações
│ │ └── security/ # Configuração segurança
│ ├── resources/
│ │ ├── application.yaml # Configurações da aplicação
│ │ └── db/migration/ # Scripts de migração
│ └── test/ # Testes unitários e integração
│
└── mailsender/ # Microserviço de Email
├── pom.xml # Dependências Maven
└── src/
├── main/java/com/securehub/mailsender/
│ ├── MailsenderApplication.java # Main class
│ ├── adapter/in/ # Adaptadores de entrada
│ │ └── EmailConsumer.java # Consumer Kafka
│ ├── application/ # Camada de aplicação
│ │ ├── port/out/ # Portas de saída
│ │ ├── service/ # Implementação serviços
│ │ └── usecases/ # Casos de uso
│ ├── domain/ # Camada de domínio
│ │ └── EmailMessage.java # Entidade email
│ └── infrastructure/ # Infraestrutura
│ ├── config/ # Configurações
│ └── mail/ # Implementação email
├── resources/
│ ├── application.yaml # Configurações
│ └── templates/ # Templates Thymeleaf
│ └── account-activation.html # Template ativação
└── test/ # Testes
| Método | Endpoint | Descrição |
|---|---|---|
| GET | /v1/ping |
Health check |
| POST | /v1/users |
Criar usuário |
| POST | /v1/users/enable |
Ativar conta |
| POST | /v1/users/password/forgot |
Esqueci senha |
| POST | /v1/users/password/reset |
Reset senha |
| POST | /v1/auth |
Login |
spring:
datasource:
url: jdbc:postgresql://localhost:5432/auth
kafka:
bootstrap-servers: localhost:29092
api:
jwt:
secret: jwt-secret
expirationInSeconds: 10
issuer: secure-hubspring:
mail:
host: sandbox.smtp.mailtrap.io
kafka:
consumer:
bootstrap-servers: localhost:29092
group-id: mail-sender-group
email:
topic: email-topic- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.