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.

Categorized in:

Backend, Spring Boot,