Este projeto é um exemplo completo de aplicação web utilizando Spring Boot, Spring Security, Java 25, Token JWT, Fetch com JS e um banco de dados MySQL.
É também temos um frontend com Html e Css com um pouco de js
Neste projeto, utilizei roles para autenticar rotas que o usuário comum não tem permissão para acessar, como as rotas (/auth) e (/users).
O JWT é utilizado para gerar um token quando o usuário realiza o login. Atenção! O usuário que faz login na rota de autenticação, nesse caso a rota de autenticação
e (/auth), não tem relação com o usuário que faz login na rota de login que é a rota (/signin).
O usuário que faz login na rota (/signin), primeiro precisa se cadastrar no banco de dados. então ele acessa a rota (/register) e faz o cadastro do usuário.
Neste caso estamos utilizando um banco de dados MySQL, e vou mostrar mais em frente como criar esse banco de dados.
Já as nossas ROLES são criada via CommandLineRunner e só da run no projeto ela já criada, Vamos usar Thymeleaf para retornar nossos templates, e o controle de acesso será feito com Spring MVC.
- Java 25
- Spring Boot
- Spring Security
- Thymeleaf
- Maven
- JWT (JSON WEb TOKEN)
- Spring Data Jpa
- MySQL
- Spring Boot Devtools
- Lombok
- Validation
- Html e css
- JS
- Senhas armazenadas de forma criptografada utilizando BCrypt
- Geração de token JWT no processo de login
- Autenticação de credenciais realizada via Controller no Back-end
- Autorização baseada em ROLES utilizando Spring Security
- Controle de acesso às rotas feito com base nas ROLES do usuário
- Rotas sensíveis protegidas pelo Spring Security
Este projeto retorna o token JWT na resposta de login.
Em aplicações de produção, recomenda-se o uso de cookies HttpOnly para armazenamento do token.
src/
├── main
│ ├── java
│ │ └── br
│ │ └── com
│ │ └── carlos
│ │ └── api
│ │ ├── ProjetoApiApplication.java
│ │ ├── controller
│ │ │ ├── AppController.java
│ │ │ └── UsuarioController.java
│ │ ├── dto
│ │ │ └── LoginRequest.java
│ │ ├── model
│ │ │ ├── Role.java
│ │ │ ├── UserAuth.java
│ │ │ └── Usuario.java
│ │ ├── repository
│ │ │ ├── IRole.java
│ │ │ ├── IUserAuth.java
│ │ │ └── IUsuario.java
│ │ ├── security
│ │ │ └── SecurityConfig.java
│ │ ├── service
│ │ │ ├── UserDetailsServiceImpl.java
│ │ │ └── UsuarioService.java
│ │ └── token
│ │ ├── Token.java
│ │ └── TokenUtil.java
│ └── resources
│ ├── application.properties
│ ├── static
│ │ ├── css
│ │ │ ├── auth.css
│ │ │ ├── cadastro.css
│ │ │ ├── home.css
│ │ │ └── signin.css
│ │ ├── img
│ │ │ ├── calabresa.jpg
│ │ │ └── header
│ │ │ ├── garfo1.png
│ │ │ ├── imager-header.jpg
│ │ │ └── menu-harburger.png
│ │ └── js
│ │ ├── cadastro.js
│ │ ├── home.js
│ │ └── signin.js
│ └── templates
│ ├── auth.html
│ ├── cadastro.html
│ ├── error.html
│ ├── home.html
│ └── signin.html
└── test
└── java
└── br
└── com
└── carlos
└── api
└── ProjetoApiApplicationTests.java
spring.application.name=PROJETO-API
spring.datasource.username = root
spring.datasource.password = password
spring.datasource.url = jdbc:mysql://localhost:3306/name_DB
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
- Java 25
- Maven 3.8.3
- git
-
clone o repositorio
git clone https://github.com/Carlos-Henrique-devv/Projeto-loja-online.git cd Projeto-loja-online -
Cria DB + tablelas + colunas padrão.
script:
create database projeto_api; use projeto_api; create table users( id INTEGER PRIMARY KEY AUTO_INCREMENT, name VARCHAR(200) NOT NULL, surname VARCHAR(200), username VARCHAR(100) NOT NULL UNIQUE, email VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(100) NOT NULL UNIQUE, phone VARCHAR(15) NOT NULL UNIQUE ); create table roles( id INTEGER PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL UNIQUE ); create table perm( id INTEGER PRIMARY KEY AUTO_INCREMENT, username VARCHAR(100) NOT NULL UNIQUE, password VARCHAR(100) NOT NULL ); CREATE TABLE perm_roles ( user_id INT NOT NULL, role_id INT NOT NULL, PRIMARY KEY (user_id, role_id) ); -
Agora e só copia esse script é cola no seu servidor MySQL
-
Acessa o projeto e da um run
-
Funcionalidades logo abaixo no fluxo de autenticação
-
O usuário se cadastra no sistema (
/register) -
O usuário faz login (
/signin) -
O backend valida as credenciais
-
Um token JWT é gerado
-
O token é enviado para o frontend
-
O usuário é autenticado com sucesso
-
Ao acessar (
/users), a rota só pode ser acessada por usuários que tenham autorização -
Caso não esteja autorizado, será redirecionado para a rota (
/login), página de interceptação do Spring Security -
Usuário padrão autenticado: User: "admin", Senha: "Admin123."
-
Será possível visualizar o usuário cadastrado que você criou