Projeto backend desenvolvido com Spring Boot, utilizando Spring Security, JWT (OAuth2 Resource Server), JPA/Hibernate, MySQL em Docker e controle de permissões por roles.
Este projeto foi construído com foco educacional, ideal para estudos e também para demonstrar conhecimentos em entrevistas de nível estudante / júnior.
- Java 17
- Spring Boot
- Spring Security
- JWT (OAuth2 Resource Server)
- Spring Data JPA / Hibernate
- MySQL 8 (Docker)
- Docker Compose
- Lombok
- Autenticação stateless com JWT
- Autorização baseada em roles (ADMIN / BASIC)
- Proteção de rotas com Spring Security
- Uso de
@PreAuthorize - Relacionamentos JPA (
@ManyToMany,@ManyToOne) - Paginação com Spring Data
- Inicialização de dados com
CommandLineRunner
src/main/java/com/loop/springsecurity
│
├── config
│ ├── SecurityConfig.java
│ └── AdminUserConfig.java
│
├── controller
│ ├── TokenController.java
│ ├── UserController.java
│ └── TweetController.java
│
├── controller/dto
│ ├── LoginRequest.java
│ ├── LoginResponse.java
│ ├── CreateUserDto.java
│ ├── CreateTweetDto.java
│ ├── FeedDto.java
│ └── FeedItemDto.java
│
├── entities
│ ├── User.java
│ ├── Role.java
│ └── Tweet.java
│
├── repository
│ ├── UserRepository.java
│ ├── RoleRepository.java
│ └── TweetRepository.java
- A aplicação não usa sessão (
STATELESS) - Autenticação é feita via JWT assinado com RSA
- O token contém:
subject→ ID do usuárioscope→ roles do usuário (ex:ADMIN,BASIC)
| Endpoint | Método | Acesso |
|---|---|---|
/users |
POST | Público |
/login |
POST | Público |
/feed |
GET | Autenticado |
/tweets |
POST | Autenticado |
/tweets/{id} |
DELETE | Dono do tweet ou ADMIN |
/users |
GET | Apenas ADMIN |
Ao iniciar a aplicação, um usuário administrador é criado automaticamente:
username: admin
password: 123
Isso é feito através da classe AdminUserConfig.
O banco de dados roda em um container Docker.
docker-compose up -d- MySQL 8
- Porta:
3307 - Database:
mydb - Usuário:
admin - Senha:
123
Os dados são persistidos usando volumes Docker.
- Usuário se cadastra (
POST /users) - Usuário faz login (
POST /login) - Backend gera um JWT
- Cliente envia o token no header:
Authorization: Bearer <token>
- Spring Security valida o token
- Controller recebe o usuário autenticado
- Autorização é feita por role ou dono do recurso
POST /login
Content-Type: application/json
{
"username": "admin",
"password": "123"
}POST /tweets
Authorization: Bearer <token>
Content-Type: application/json
{
"content": "Meu primeiro tweet"
}Este projeto demonstra conhecimento em:
- Backend com Spring Boot
- Segurança com JWT
- Boas práticas REST
- Integração com banco de dados
- Uso de Docker no desenvolvimento
Ideal para:
- Estudo
- Portfólio
- Demonstração técnica em entrevistas
Desenvolvido por Gustavo 🚀
Se quiser, fique à vontade para clonar, estudar e evoluir este projeto.