Skip to content

joaobenedetmachado/spring-jwt-rabbitmq

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

image http://localhost:8080/swagger-ui/index.html


Exemplo de requisicoes:

Post de usuario: curl -X POST http://localhost:8080/api/auth/register \ -H "Content-Type: application/json" \ -d '{"username":"testuser","password":"password123"}' //Output: Usuario registrado com sucesso!

Login de usuario retornando o token JWT curl -X POST http://localhost:8080/api/auth/login \ -H "Content-Type: application/json" \ -d '{"username":"testuser","password":"password123"}' //Output: TOKEN JWT

Objetivo do projeto

O principal objetivo deste pequeno projeto foi que eu podesse consolidar meu aprendizados em jwt, swagger e rabbitMQ, então criei um projeto onde tem um User, e ele pode enviar mensagens, quando ele faz login, ele recebe um token JWT, e precisa da mesma para que ele possa enviar uma mensagem e tal

Link do start.spring (sei que não é necessario mas está ai para projetos futuros)

https://start.spring.io/#!type=maven-project&language=java&platformVersion=3.4.4&packaging=jar&jvmVersion=21&groupId=com.jowdev&artifactId=simpleapi&name=simpleapi&description=Demo%20project%20for%20Spring%20Boot&packageName=com.jowdev.simpleapi&dependencies=data-jpa,h2,amqp,security,web

Fluxo de Funcionamento da API Spring Boot

Aqui está um passo a passo numerado explicando como a API funciona em tempo de execução:

Fluxo de Autenticação

O usuário envia uma requisição de registro para /api/auth/register com username e password O AuthController recebe a requisição e repassa para o AuthService O AuthService verifica se o username já existe no banco através do UserRepository Se não existir, o AuthService criptografa a senha usando o PasswordEncoder O novo usuário é salvo no banco de dados com a senha criptografada O AuthController retorna uma resposta de sucesso ao cliente O usuário envia uma requisição de login para /api/auth/login com username e password O AuthController repassa para o AuthService O AuthService usa o AuthenticationManager para autenticar o usuário Se as credenciais estiverem corretas, o JwtService gera um token JWT O token JWT é retornado ao cliente na resposta

Fluxo de Requisições Autenticadas

O cliente envia uma requisição para um endpoint protegido (ex: /api/messages) incluindo o token JWT no cabeçalho Authorization: Bearer [token] O JwtAuthFilter intercepta a requisição antes que chegue ao controller O filtro extrai o token do cabeçalho da requisição O JwtService valida o token e extrai o username O UserDetailsService carrega os detalhes do usuário através do username O JwtService verifica se o token é válido para esse usuário Se for válido, cria um objeto Authentication e define no SecurityContext A requisição continua seu fluxo normal até o controller apropriado

Fluxo de Criação de Mensagem

O usuário autenticado envia uma requisição POST para /api/messages com o conteúdo da mensagem O MessageController recebe a requisição e repassa para o MessageService O MessageService extrai o usuário autenticado do SecurityContext Uma nova instância de Message é criada com o conteúdo, timestamp e usuário A mensagem é salva no banco de dados através do MessageRepository A mensagem é enviada ao RabbitMQ através do RabbitMQService O RabbitMQService utiliza o RabbitTemplate para enviar a mensagem para a exchange configurada A exchange roteia a mensagem para a fila (queue) correspondente O MessageController retorna a mensagem criada ao cliente

Fluxo de Processamento Assíncrono

O método anotado com @RabbitListener no MessageService escuta a fila de mensagens Quando uma nova mensagem chega à fila, o listener é acionado O listener processa a mensagem (neste exemplo, apenas loga no console) O processamento ocorre de forma assíncrona, independente da requisição HTTP original

Fluxo de Consulta de Mensagens

O usuário autenticado envia uma requisição GET para /api/messages O MessageController recebe a requisição e repassa para o MessageService O MessageService usa o MessageRepository para buscar todas as mensagens As mensagens são retornadas ao cliente na resposta

Fluxo da Documentação Swagger

O usuário acessa a URL /swagger-ui.html no navegador O OpenApiConfig fornece as configurações e metadados da API O Swagger UI é renderizado com base nas anotações dos controllers O usuário pode visualizar e testar os endpoints diretamente pela interface

Este fluxo ilustra como as diferentes partes da aplicação interagem entre si, desde a autenticação até o processamento assíncrono de mensagens via RabbitMQ.

About

A simple API with JWT, Swagger and RabbitMQ

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages