¡Hola Estudiante, espero que estés bien
Parece que has comprendido bien los conceptos clave de la clase. Has mencionado que aprendiste a implementar y usar un filtro personalizado para validar el token JWT y a configurar la seguridad de las rutas, lo cual es esencial para proteger una API Rest.
Para darte un ejemplo práctico, podrías crear un filtro personalizado extendiendo la clase OncePerRequestFilter de Spring. En este filtro, podrías extraer el token JWT del encabezado de la request, validarlo usando la biblioteca Auth0 java-jwt y, si es válido, autenticar al usuario configurando el SecurityContextHolder.
Aquí tienes un pequeño fragmento de código para ilustrar cómo podrías comenzar:
public class JwtRequestFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
final String requestTokenHeader = request.getHeader("Authorization");
String username = null;
String jwtToken = null;
// JWT Token está en el formato "Bearer token". Remover el prefijo y obtener el token
if (requestTokenHeader != null && requestTokenHeader.startsWith("Bearer ")) {
jwtToken = requestTokenHeader.substring(7);
try {
username = jwtUtil.getUsernameFromToken(jwtToken);
} catch (IllegalArgumentException e) {
System.out.println("No se puede obtener el JWT Token");
}
} else {
logger.warn("JWT Token no comienza con el prefijo Bearer");
}
// Una vez que tenemos el token, validamos y configuramos el SecurityContext
if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {
// Validar el token aquí y configurar el contexto de seguridad
}
filterChain.doFilter(request, response);
}
}
Este es solo un punto de partida, pero espero que te ayude a visualizar cómo podrías implementar lo que aprendiste.
¡Espero haber ayudado y buenos estudios!