Na terceira parte da nossa série, vamos criar o endpoint de login, responsável por autenticar o usuário e gerar um token JWT que será utilizado nas próximas requisições protegidas da API.
🎯 Objetivo
- Criar o controller responsável pelo login:
/auth/login
- Explicar o uso do
AuthenticationManager
- Entender como o
JwtService
é utilizado para gerar o token - Retornar o token de forma simples e segura
📁 Estrutura de Pacotes
Para manter nosso projeto organizado, colocamos os arquivos nas seguintes pastas:
com.kanechan.restaurante.controller -> AuthController.java
com.kanechan.restaurante.dto -> AuthRequest.java, AuthResponse.java
com.kanechan.restaurante.services -> JwtService.java
✏️ Criando o DTO de Requisição: AuthRequest
Este DTO representa os dados de entrada para o login:
public class AuthRequest {
private String username;
private String password;
// Getters e Setters
}
🧾 Criando o DTO de Resposta: AuthResponse
Este DTO representa o retorno do login, contendo apenas o token JWT:
public class AuthResponse {
private String token;
public AuthResponse(String token) {
this.token = token;
}
public String getToken() {
return token;
}
}
🔧 Criando o AuthController
Esse é o nosso controller responsável por autenticar o usuário e gerar o token.
@RestController
@RequestMapping("/auth")
public class AuthController {
@Autowired
private AuthenticationManager authenticationManager;
@Autowired
private JwtService jwtService;
@PostMapping("/login")
public AuthResponse login(@RequestBody AuthRequest request) {
Authentication authentication = authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(request.getUsername(), request.getPassword())
);
User user = (User) authentication.getPrincipal();
String token = jwtService.generateToken(user.getUsername());
return new AuthResponse(token);
}
}
🔍 Explicando o que acontece
AuthenticationManager
: é usado para verificar se o usuário e a senha são válidos.UsernamePasswordAuthenticationToken
: representa a autenticação com usuário e senha.authentication.getPrincipal()
: retorna o usuário autenticado.jwtService.generateToken(...)
: gera o JWT que será enviado ao cliente.
📦 Exemplo de Requisição via Postman
Endpoint: POST /auth/login
Body (JSON):
{
"username": "admin",
"password": "123456"
}
Resposta esperada:
{
"token": "eyJhbGciOiJIUzI1NiJ9..."
}
🔐 Próximos Passos
No próximo artigo, vamos aprender a proteger endpoints usando o token JWT retornado aqui e configurar o filtro de autenticação para validar esse token nas requisições.