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:
- Cabeçalho: Tipo e algoritmo
- Payload: Dados customizados
- 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();
- 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
}
}
- 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 |