📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados na Matriz de 20 Capítulos de Aplicações Full Stack. Recomendado revisar antes de iniciar a execução.

📦 Gestão de Estoque 02: Segurança JWT, RBAC & Relatórios

v1.0 — Continuação enterprise da solução de inventário com autenticação stateless via tokens JWT, controle granular de acessos por papel (RBAC), histórico auditado e relatórios gerenciais.

Trilha de Especialização Pedagógica — Série Gestão de Estoque (Projeto 2 de 2)

🎓 Nível Profissional Simulado: Engenheiro Back-end Pleno (Java & Spring Security). O isolamento de privilégios de almoxarifado é uma exigência de compliance contábil e auditoria (SOX). Dominar filtros de segurança interceptores (OncePerRequestFilter), emissão criptográfica de tokens JWT com claims de roles e autorização declarativa nos métodos (@PreAuthorize) capacita o desenvolvedor a construir sistemas enterprise invioláveis.


🏛️ Galeria Arquitetural & Diagramas de Engenharia

Arquitetura de Segurança, RBAC e Camadas de Auditoria

Arquitetura Gestão de Estoque 02: Spring Security e JWT

Ciclo de Autenticação JWT e Autorização RBAC

Ciclo de Autenticação JWT e RBAC


📁 Estrutura Canônica de Pastas Anti-Colisão

O projeto adota a convenção padronizada de subpastas por camada e tecnologia <camada>-<tecnologia>:

catalogo_projetos/fullstack_estoque_02_spring_auth/
├── api-spring/                 # Backend enterprise em Java 21 e Spring Boot 3
│   ├── src/
│   │   ├── main/java/br/com/estoque/
│   │   │   ├── config/         # Filtros de segurança e SecurityFilterChain
│   │   │   ├── controller/     # Endpoints de autenticação, relatórios e estoque
│   │   │   ├── dto/            # LoginRequest, JwtResponse, MovimentacaoDTO
│   │   │   ├── model/          # Entidades Usuario, Role, MovimentacaoEstoque
│   │   │   ├── repository/     # Repositórios com queries de auditoria
│   │   │   ├── security/       # JwtService, UserDetailsService e hash Bcrypt
│   │   │   └── service/        # Regras de movimentação auditada e exportação
│   │   └── main/resources/
│   │       ├── application.yml # Configurações de segredos JWT e datasource
│   │       └── data.sql        # Seed com usuários padrão (admin e operador)
│   ├── Dockerfile              # Dockerfile multi-stage com OpenJDK 21
│   ├── docker-compose.yml      # Banco PostgreSQL e container da aplicação
│   └── pom.xml                 # Dependências jjwt, spring-boot-starter-security
├── assets/                     # Diagramas vetoriais SVG autorais
└── modulo00.md a modulo04.md   # Cadernos conceituais de implementação passo a passo

📚 Trilha Conceitual de Engenharia (Módulos 00 ao 04)


🧑‍💼 Especificação Formal de Engenharia de Software

1. Histórias de Usuário (User Stories)

2. Requisitos Funcionais (RF)

3. Requisitos Não-Funcionais (RNF)


📐 Diagrama de Casos de Uso (UML / Mermaid)

flowchart LR
    subgraph Atores
        Estoquista["👤 Estoquista"]
        Admin["🔑 Gerente / Admin"]
    end

    subgraph "Sistema de Gestão de Estoque v2 (Auth & RBAC)"
        UC01["UC01: Autenticar via JWT"]
        UC02["UC02: Registrar Entrada/Saída com Auditoria"]
        UC03["UC03: Gerenciar Usuários e Perfis"]
        UC04["UC04: Emitir Relatório de Auditoria"]
        UC05["UC05: Exportar Relatório de Itens Críticos"]
    end

    Estoquista --> UC01
    Estoquista --> UC02

    Admin --> UC01
    Admin --> UC02
    Admin --> UC03
    Admin --> UC04
    Admin --> UC05

📊 Matriz de Rastreabilidade de Requisitos (RTM)

ID Requisito História de Usuário Caso de Uso Camada de Segurança (api-spring) Camada de Serviço & Controller Status
RF-GE01 US-GE01 UC01 AuthController.java JwtService.java ✅ Coberto
RF-GE02 US-GE01 UC01 JwtService.java UserDetailsServiceImpl.java ✅ Coberto
RF-GE03 US-GE01 / US-GE02 UC01 JwtAuthenticationFilter.java SecurityConfig.java ✅ Coberto
RF-GE04 US-GE03 UC02 MovimentacaoRepository.java MovimentacaoService.java ✅ Coberto
RF-GE05 US-GE04 / US-GE05 UC04 / UC05 @PreAuthorize("hasRole('ADMIN')") RelatorioController.java ✅ Coberto

🚀 Roteiro de Execução & Homologação no Laboratório

1. Inicialização do Backend Spring Boot com JWT (api-spring)

cd catalogo_projetos/fullstack_estoque_02_spring_auth/api-spring

# Execução em modo desenvolvimento com banco em memória
./mvnw spring-boot:run -Dspring-boot.run.profiles=dev

2. Fluxo de Teste de Autenticação via cURL

# 1. Obter Token JWT como ADMIN
curl -X POST http://localhost:8080/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"password123"}'

# 2. Consultar Relatório com Token
curl -X GET http://localhost:8080/api/relatorios/criticos \
  -H "Authorization: Bearer <SEU_TOKEN_AQUI>"

🧪 Matriz de Checkpoints de Homologação (CP-01 a CP-05)

Checkpoint Procedimento de Verificação Critério de Aceite Status
CP-01 Disparar POST /api/auth/login com credenciais válidas. Retorno HTTP 200 contendo o token JWT assinado e roles do usuário. PASS ✅
CP-02 Acessar endpoint protegido /api/relatorios/criticos sem token. Retorno HTTP 401 Unauthorized imediato pelo Spring Security. PASS ✅
CP-03 Acessar /api/relatorios/criticos autenticado como operador comum. Retorno HTTP 403 Forbidden respeitando a anotação @PreAuthorize. PASS ✅
CP-04 Registrar saída de produto via endpoint auditado. Registro persistido na tabela movimentacoes_estoque com autor vinculado. PASS ✅
CP-05 Executar suíte de testes ./mvnw test. Todos os testes de segurança e contratos executam com BUILD SUCCESS. PASS ✅