Esta aplicação é uma API desenvolvida em Spring Boot que utiliza Spring Security, JWT, OAuth2, Lombok, MySQL e JPA. A aplicação possui três tabelas principais: roles
, users
e tweets
. A autenticação é baseada em roles, com permissões de admin
e basic
.
- Spring Boot: Framework para criação de aplicações Java.
- Spring Security: Framework para autenticação e autorização.
- JWT (JSON Web Tokens): Para autenticação segura com tokens.
- OAuth2: Protocolo para autorização.
- Lombok: Biblioteca para reduzir o código boilerplate.
- MySQL: Sistema de gerenciamento de banco de dados relacional.
- JPA (Java Persistence API): Para mapeamento objeto-relacional.
A aplicação possui três tabelas principais:
-
roles:
id
(Long): Identificador único da role.name
(String): Nome da role (e.g.,admin
,basic
).
-
users:
id
(UUID): Identificador único do usuário.username
(String): Nome de usuário.password
(String): Senha do usuário.roles
(Set): Roles associadas ao usuário.
-
tweets:
id
(Long): Identificador único do tweet.content
(String): Conteúdo do tweet.user
(User): Usuário que criou o tweet.
-
Autenticação e Autorização:
- Autenticação via JWT e OAuth2.
- Autorização baseada em roles (
admin
ebasic
).
-
Operações CRUD:
- Criação, leitura, atualização e exclusão de tweets.
- Gerenciamento de usuários e roles.
- Java 17 ou superior
- Maven 3.6 ou superior
- MySQL 8.0 ou superior
Configure as seguintes variáveis de ambiente para a aplicação:
DATABASE_URL=jdbc:mysql://localhost:3306/mydb
DATABASE_USERNAME=admin
DATABASE_PASSWORD=123
JWT_PUBLIC_KEY=classpath:app.pub
JWT_PRIVATE_KEY=classpath:app.key
Não compartilhe essas chaves com ninguém, nem coloque-as no github
- Vá até o diretório resources e digite o comando para gerar a chave privada.
cd src/main/resources
openssl genrsa
- Crie a chave pública vinculada a chave privada.
openssl rsa -in nome_da_chave_privada.key -pubout -out nome_da_chave_pública.key
- Clone o repositório:
git clone https://github.com/MSpilari/springSecurityApi.git
cd sua-aplicacao
-
Configure o banco de dados MySQL conforme necessário e ajuste as variáveis de ambiente no arquivo
application.properties
ou configure-as no ambiente do sistema. -
Execute o Maven para construir a aplicação:
mvn clean install
- Execute a aplicação:
mvn spring-boot:run
A aplicação expõe os seguintes endpoints principais:
-
Autenticação:
POST /login
: Autenticação do usuário.POST /users
: Registro de novo usuário.GET /users
: Mostra a lista de usuários apenas para o admin.
-
Tweets:
GET /feed
: Obter todos os tweets.POST /tweets
: Criar um novo tweet.DELETE /tweets/{id}
: Deletar um tweet por ID.
Autenticação:
curl -X POST http://localhost:8080/login \
-H "Content-Type: application/json" \
-d '{"username":"admin", "password":"password"}'
Criar um Tweet:
curl -X POST http://localhost:8080/tweets \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <seu-token-jwt>" \
-d '{"content":"Hello, world!"}'