Validação de Login com JWT, Filtros e Interceptores

Fluxo de Validação de Login

1. Validação de Parâmetros

Verifica se credenciais foram enviadas:

if (StringUtils.isVazio(credenciais.getUsuario()) || 
    StringUtils.isVazio(credenciais.getSenha())) {
    throw new ErroCustomizado("Credenciais obrigatórias");
}

2. Processamento Lógico

2.1 Busca de Usuário

Funcionario funcionario = repositorio.buscarPorUsuario(credenciais.getUsuario());

2.2 Verificação de Existência

if (funcionario == null) {
    throw new ErroCustomizado("Usuário inexistente");
}

2.3 Validação de Senha

if (!funcionario.getSenha().equals(credencia
    .getSenha())) {
    throw new ErroCustomizado("Credenciais inválidas");
}

3. Geração de Token

3.1 Criação de JWT

Map<String, Object> dados = new HashMap<>();
dados.put("id", funcionario.getId());
String token = TokenUtil.gerarToken(dados);

3.2 Resposta da API

return new RespostaLogin(
    funcionario.getId(),
    funcionario.getNome(),
    funcionario.getUsuario(),
    token
);

Conceitos de JWT, Filtros e Interceptores

2.1 JWT (JSON Web Token)

Token de autenticação com características:

  • Autocontido: Armazena dados personalizados
  • Compacto: Formato string para transmissão eficiente

Estrutura:

  1. Cabeçalho: Tipo e algoritmo
  2. Payload: Dados customizados
  3. Assinatura: Verificação de integridade

2.4 Codificação Base64

Conversão de dados binários para 64 caracteres ASCII. Não é método de criptografia.

2.5 Implementação JWT

<dependency>
  <groupId>io.jsonwebtoken</groupId>
  <artifactId>jjwt</artifactId>
  <version>0.9.1</version>
</dependency>

Geração:

Map<String, Object> dadosToken = new HashMap<>();
dadosToken.put("userId", 101);
String jwt = Jwts.builder()
    .setClaims(dadosToken)
    .signWith(Algorithm.HS256, "chaveSecreta")
    .compact();

Validação:

Claims claims = Jwts.parser()
    .setSigningKey("chaveSecreta")
    .parseClaimsJws(jwt)
    .getBody();
  1. Filtros

Interceptam requisições para operações comuns como:

  • Validação de login
  • Tratamento de caracteres

Implementação:

@WebFilter("/*")
public class FiltroExemplo implements Filter {
  
  public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) {
    // Lógica de pré-processamento
    chain.doFilter(req, res); // Continua o fluxo
    // Pós-processamento
  }
}
  1. Interceptores

Interceptam execuções de métodos em frameworks Spring:

Implemantação:

@Component
public class InterceptorExemplo implements HandlerInterceptor {

  @Override
  public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object handler) {
    // Executado antes do controlador
    return true; // Permite continuar
  }
}

Registro:

@Configuration
public class ConfigWeb implements WebMvcConfigurer {

  @Autowired
  private InterceptorExemplo interceptor;

  @Override
  public void addInterceptors(InterceptorRegistry reg) {
    reg.addInterceptor(interceptor).addPathPatterns("/**");
  }
}

Padrões de Interceptação:

Padrão Exemplo Cobertura
/* /api Não cobre /api/1
/** /api/1/2 Todos os níveis

Tags: jwt SpringBoot Filtro Interceptor autenticacao

Publicado em 7-11 04:54