Uma aplicação exemplo (loja) com backend em Spring Boot e frontend em Angular (standalone components). O propósito deste repositório é demonstrar autenticação JWT, operações CRUD de produtos e separação de privilégios (admin vs usuário comum).
- Backend: Java + Spring Boot (REST, Spring Security, JWT)
- Frontend: Angular v21 (standalone components, HttpClient, Guards, Interceptors)
Ports padrão:
- Frontend:
http://localhost:4200 - Backend:
http://localhost:8080
/backend— código Java Spring Bootsrc/main/java/hacker/store/hackerstore— código fonte- segurança:
infra/security(filtros, token service, configurações)
/frontend— código Angularsrc/app— components, services e rotas
-
POST /auth/login— Autenticação- Request JSON:
{ "login": "isaquelael", "password": "..." } - Response JSON:
{ "token": "<JWT>", "user": { "login": "isaquelael", "role": "ADMIN" } }
- Request JSON:
-
POST /auth/register— Registrar usuário (requer ROLE_ADMIN no backend) -
GET /produto— Listar produtos (público) -
POST /produto— Criar produto (ADMIN) -
PUT /produto/{id}— Atualizar produto (ADMIN) -
DELETE /produto/{id}— Excluir produto (ADMIN)
Observação: O backend usa JWT e valida o token via header
Authorization: Bearer <token>.
cd backend/hackerstore
./mvnw spring-boot:run # (Windows: mvnw.cmd spring-boot:run)cd frontend
npm install
npm start # ou ng serveAbra o navegador em http://localhost:4200.
- O frontend envia
{ login, password }paraPOST http://localhost:8080/auth/login. - Ao receber o
token, o frontend salva emlocalStoragecomoauth_token. - Um
JwtInterceptoradicionaAuthorization: Bearer <token>nas requisições subsequentes. AuthServiceexpõeisAdmin()para condicionar ações administrativas na UI.
Se o usuário estiver autenticado e com role ADMIN, verá os botões de adicionar/editar/excluir produtos. Usuários anônimos apenas visualizam.
O endpoint POST /auth/register exige ROLE_ADMIN (apenas admins criam usuários). Para criar o primeiro administrador existem duas opções:
- Inserir diretamente no banco (ex.: script SQL) um usuário com
role = ADMINe senhaBCryptencoded. - Temporariamente alterar a configuração de segurança para permitir registro público, criar o admin e voltar a proteção.
Exemplo de payload (se o endpoint estiver disponível):
{
"login": "isaquelael",
"password": "sua_senha",
"role": "ADMIN"
}- CORS: o backend permite chamadas do frontend (
http://localhost:4200) e o Security está configurado para aceitar requisiçõesOPTIONS(pré-voo). - Senhas são armazenadas usando
BCryptPasswordEncoderno backend. - Tokens expiram de acordo com a configuração em
TokenService.
- Backend: use
mvnw testpara rodar testes unitários (se existirem). - Frontend:
npm test/ng testpara executar testes.
Abra issues ou PRs. Boas contribuições incluem:
- Ajustes de documentação
- Melhorias na experiência do login/UX
- Tests unitários e e2e
Crie uma issue no repositório para feedbacks, dúvidas ou relatórios de bug.