Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Sugestão] Correção para Erro 403 no Cadastro de Pedidos

Para quem estiver recebendo o erro 403 (Forbidden) ao tentar cadastrar um pedido, verifique o perfil do usuário utilizado na autenticação.

Atualmente, a operação de cadastro de pedidos está disponível apenas para usuários com o perfil Comprador. Caso esteja utilizando o usuário Administrador, gere um novo token utilizando um usuário com perfil Comprador e atualize o token no campo Authorization (Bearer Token) da requisição.

Após a troca do usuário e atualização do token, a operação deverá ser executada normalmente.

curl --location 'localhost:8080/login' \
--header 'Content-Type: application/json' \
--data-raw '{
    "email":"comprador@email.com.br",
    "senha":"123456"
}
'
1 resposta

Olá, Estudante. Como vai?

Excelente contribuição! Compartilhar a solução para problemas de segurança e controle de acesso (RBAC - Role-Based Access Control) poupa muito tempo dos colegas de turma. O erro 403 Forbidden é um dos mais comuns quando lidamos com o Spring Security, e a sua explicação sobre o motivo do bloqueio (usuário administrador tentando executar uma ação restrita ao comprador) foi muito precisa e direta ao ponto.

Como você está estudando o capítulo de Requisições Paralelas e Threads com Spring, preparei alguns complementos técnicos importantes para contextualizar o porquê de essa validação de perfil ser tão crítica, além de uma dica de boas práticas para os testes:

O Impacto do Token JWT no Ambiente Multithread

No Spring Boot, por padrão, cada requisição HTTP recebida pelo servidor roda dentro de uma Thread isolada (gerenciada pelo servidor embutido Tomcat).

Quando você envia o cabeçalho Authorization: Bearer <TOKEN>, o Spring Security captura esse token na thread da requisição, valida os perfis (Roles) e injeta o usuário autenticado no contexto de segurança (SecurityContextHolder). Garante-se assim que, mesmo que o sistema receba 100 requisições paralelas de compradores e administradores ao mesmo tempo, cada Thread saberá exatamente quem está executando aquela ação sem que ocorra vazamento ou mistura de dados entre os usuários.

Simulando o Cenário de Concorrência com o curl

Para os alunos que estão testando o comportamento assíncrono ou concorrente do projeto (como o disparo de vários pedidos simultâneos), o comando curl que você compartilhou pode ser adaptado para rodar em segundo plano no terminal (usando o caractere & no Linux/macOS ou abrindo várias abas no Windows).

Após capturar o token do comprador, o comando para disparar o cadastro do pedido em paralelo ficaria parecido com isto:

curl --location 'localhost:8080/pedidos' \
--header 'Authorization: Bearer SEU_TOKEN_AQUI' \
--header 'Content-Type: application/json' \
--data '{
    "produto_id": 1,
    "quantidade": 2
}' &

Ao repetir esse comando adicionando o & no final das linhas, o terminal dispara as requisições de forma simultânea, permitindo visualizar o Spring gerenciando as múltiplas threads de cadastro com o token correto do Comprador!

Parabéns por documentar o passo a passo com o exemplo de payload de login. Isso ajuda muito a manter a comunidade engajada e superando os desafios do curso.

Espero que possa ter lhe ajudado!