Cordial saludo, hoy vivi una experiencia enriquesedora pero compleja. resulta que realice el codigo al pie d ela letra de la clase con la particularidad que se me vencio el token ya que sali a almorzar, como el token lo valide para 1 hora gtm -5 se me venció y no arrancaba, validando me enviaba errores de vencimiento de token y al gen3erar uno nuevo recibia errores 500 con la ayuda de Luri identifique que para optimizar el código deje la clase SecurityFilter así :
package med.voll.api.infra.security;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import med.voll.api.domain.usuario.Usuariorepository; // Asegúrate de importar UsuarioRepository
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
import java.io.IOException;
@Component
public class SecurityFilter extends OncePerRequestFilter {
@Autowired
private TokenService tokenService;
@Autowired
private Usuariorepository usuarioRepository;
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
var tokenJWT = recuperarToken(request);
if (tokenJWT != null) {
var subject = tokenService.getSubject(tokenJWT);
var usuario = usuarioRepository.findByLogin(subject);
System.out.println(subject);
if (usuario != null) {
var authentication = new UsernamePasswordAuthenticationToken(usuario, null, usuario.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authentication);
}
}
filterChain.doFilter(request, response);
}
private String recuperarToken(HttpServletRequest request) {
var authorizationHeader = request.getHeader("Authorization");
if (authorizationHeader != null) {
return authorizationHeader.replace("Bearer ", "");
}
return null;
}
}
Gracias a estas modificaciones que evaluarn con un if quie el token sea diferente de null y aplicando una autenticacion logre correr. Luri me reconoció que luego del vencimiento del token hay un error de implementeacion una vez se vence el token con el Header del mismo.
mil gracias por esta experiencia. quiero aprender mas por mi bienestar