Este projeto é uma API de encurtamento de URLs desenvolvida com Java e Spring Boot. Ele permite que usuários autenticados gerem URLs curtas, acessem seus redirecionamentos, listem seus próprios links e (caso sejam administradores) excluam links encurtados. Proposto pelo Rafael Coelho o desafio #8 Encurtador de Links.
- Java 21
- Spring Boot (Security, Oauth2-resource-server, Data-jpa, Web)
- H2 Database
- JPA/Hibernate
- SHA-256 + Base62 (hash das URLs)
- JWT (autenticação)
- Docker + Docker Compose
- Traefik (reverse proxy)
- Swagger/OpenAPI (documentação)
- JUnit (testes)
- 🔐 Autenticação via token JWT
- ✂️ Encurtamento de URLs com hash criptográfico
- 🔁 Redirecionamento automático com base no código da URL
- 📈 Contador de acessos por URL
- 🐳 Containerização com Docker
- 🌐 Acesso externo facilitado com Traefik
- Docker + Docker Compose
- Java 21
- Maven (caso queira rodar fora do Docker)
git clone https://github.com/jvictornascimento/springboot-url-shortener.git
cd springboot-url-shortener
docker-compose up --build
Para melhor experiência de testes locais, você pode configurar o domínio short.local
no seu arquivo hosts
.
- Execute o Prompt de Comando como Administrador
- Digite:
notepad C:\Windows\System32\drivers\etc\hosts
- Adicione a seguinte linha:
127.0.0.1 short.local
- Execute o terminal com sudo:
sudo nano /etc/hosts
- Adicione:
127.0.0.1 short.local
Depois disso, você pode acessar: http://short.local/{short_code}
POST /login
- Requisição de login para geração do token JWT.
- Requer
Authentication
no corpo da requisição. - Respostas:
200 OK
- Login bem-sucedido401 Unauthorized
- Usuário ou senha inválidos
GET /{short_code}
- Redireciona o usuário para a URL original com base no código encurtado.
- Respostas:
302 Found
- Redirecionamento bem-sucedido401 Unauthorized
- Código não encontrado410 Gone
- Link expirado
POST /api/shorten
- Requer autenticação via JWT.
- Corpo da requisição:
{ "originUrl": "https://exemplo.com" }
- Respostas:
200 OK
- URL encurtada com sucesso401 Unauthorized
- Usuário não autorizado
GET /api/links
- Retorna todas as URLs encurtadas pelo usuário logado.
- Respostas:
200 OK
- Lista retornada401 Unauthorized
DELETE /api/links/{short_code}
- Requer permissão de administrador (
SCOPE_ROLE_ADMIN
). - Respostas:
200 OK
- Deletado com sucesso401 Unauthorized
- Autenticação via JWT
- Expiração dos tokens
- Autorização por roles (usuário e admin)
- Expiração de links
Para utilizar os endpoints de forma completa, é necessário autenticar-se com um token JWT válido.
Este projeto está pronto para ser containerizado via Docker e acessado localmente com short.local
graças ao uso do Traefik como proxy reverso.
- Autenticação com JWT
- Criação e redirecionamento de URLs
- Deploy com Docker + Traefik
- Estatísticas de acesso por URL
- Persistência com PostgreSQL (futura)
- Testes automatizados (futura)
- Interface frontend (futura)