API REST desenvolvida em Java + Spring Boot para gerenciamento de produtos, com autenticação e autorização via JWT e suporte a roles de usuários. Ideal para aplicações de catálogo, marketplace ou ecommerce.
Este projeto fornece endpoints protegidos para manipulação de produtos e autenticação de usuários. A estrutura inclui:
- CRUD completo para produtos
- Registro e login de usuários
- Geração e validação de tokens JWT
- Controle de acesso por roles (
ADMIN,USER) - Segurança baseada em filtros e configuração com Spring Security
src
└── main
├── java
│ └── com.catavirtual.catalogo
│ ├── controllers
│ │ ├── AuthenticationController.java
│ │ └── ProductController.java
│ ├── domain
│ │ ├── product
│ │ │ ├── Product.java
│ │ │ └── ProductRequest.java
│ │ └── user
│ │ ├── AuthenticationDTO.java
│ │ ├── LoginResponseDTO.java
│ │ ├── RegisterDTO.java
│ │ ├── User.java
│ │ └── UserRole.java
│ ├── infra
│ │ ├── repositories
│ │ │ ├── ProductRepository.java
│ │ │ └── UserRepository.java
│ │ ├── security
│ │ │ ├── SecurityConfiguration.java
│ │ │ ├── SecurityFilter.java
│ │ │ ├── TokenService.java
│ │ │ └── RequestsExceptionHandler.java
│ │ └── services
│ │ └── AuthorizationService.java
│ └── CatalogoApplication.java
└── resources
├── db.migration
│ ├── V1_create-table-product.sql
│ ├── V2_alter-table-product.sql
│ └── V3_create-table-users.sql
└── application.properties
- Java 17+
- Maven
- Banco de dados PostgreSQL ou H2 (memória)
git clone https://github.com/raphael0627f/catalogo-backend-api.git
cd catalogo-backend-apiNo arquivo application.properties, configure o banco de dados PostgreSQL:
spring.datasource.url=jdbc:postgresql://localhost:5432/catalogo
spring.datasource.username=seu_usuario
spring.datasource.password=sua_senha
spring.jpa.hibernate.ddl-auto=updatemvn spring-boot:runA aplicação estará acessível em:
http://localhost:8080
A autenticação é feita via JWT.
POST /auth/login
Content-Type: application/json
{
"login": "usuario@email.com",
"password": "senha"
}Resposta:
{
"token": "eyJhbGciOiJIUzI1NiIs..."
}POST /auth/register
Content-Type: application/json
{
"login": "novo@user.com",
"password": "123456",
"role": "ADMIN"
}| Método | Rota | Protegido? | Descrição |
|---|---|---|---|
| GET | /products |
✅ | Lista todos os produtos |
| POST | /products |
✅ | Cria um novo produto |
| PUT | /products/ |
✅ | Atualiza um produto |
| DELETE | /products/{id} |
✅ | Remove um produto |
Todos os endpoints requerem o header:
Authorization: Bearer <token>Para rodar os testes:
mvn testVocê pode integrar o Swagger com a dependência:
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.7.0</version>
</dependency>E acessar via:
http://localhost:8080/swagger-ui.html
MIT License © Raphael Ferreira
github.com/raphael0627f
Esse projeto é ideal para fins de estudo, testes de integração com frontends em React, Angular ou Vue.