Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
7
respuestas

[Duda] verifier is null

Me da el siguiente error: Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad este es mi codigo del filter @Autowired private TokenService tokenService;

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
    System.out.println("El filtro esta siendo llamado");
    //Obtener el token de los header
    var token = request.getHeader("Authorization");
    System.out.println(token);
    if (token == null || token == ""){
        throw new RuntimeException("El token enviado no es valido");
    }
    token = token.replace("Bearer"," ");
    System.out.println(token);
    System.out.println(tokenService.getSubject(token));
    filterChain.doFilter(request,response);
}
**Token service**
public String getSubject(String token){
    DecodedJWT verifier = null;
    try {
        Algorithm algorithm = Algorithm.HMAC256("123456"); // validando firma
        verifier = JWT.require(algorithm)
                .withIssuer("voll med")
                .build()
                .verify(token);
    } catch (JWTVerificationException exception) {
        System.out.println(exception.toString());
    }
    if (verifier.getSubject() == null) {
        throw new RuntimeException("Verifier invalido");
    }
    return verifier.getSubject();
}
7 respuestas

ese es mi codigo del filter

¡Hola Erick, espero que estés bien!

Entiendo que estás teniendo un problema con el error "Verifier is null" en tu código. Parece que el problema puede estar relacionado con la verificación del token en tu método getSubject del servicio de token.

Según el código que proporcionaste, el problema podría estar en la comparación verifier.getSubject() == null. Es posible que el objeto verifier esté siendo nulo en algún momento, lo que provoca el error.

Una forma de abordar este problema es verificar si verifier es nulo antes de intentar acceder a su método getSubject(). Podrías hacer algo así:

if (verifier == null || verifier.getSubject() == null) {
    throw new RuntimeException("Verifier inválido");
}
return verifier.getSubject();

Al agregar la verificación de nulidad de verifier antes de intentar acceder a su método getSubject(), podrías evitar el error "Verifier is null" que estás experimentando.

Espero que esta sugerencia te ayude a resolver el problema. ¡Buena suerte con tu proyecto en Spring Boot!

Espero haber ayudado y buenos estudios!

Tengo la misma situacion, hice todo dentro del mismo trycatch y ya no me daba error, pero me da una excepcion rara: public String getSubject(String token) { DecodedJWT verifier = null; try { Algorithm algorithm = Algorithm.HMAC256(apiSecret); verifier = JWT.require(algorithm) .withIssuer("voll med") .build() .verify(token); verifier.getSubject(); if(verifier == null || verifier.getSubject() == null){ throw new RuntimeException("Verifier invalido"); } return verifier.getSubject();

    } catch (JWTVerificationException exception) {
        System.out.println(exception.toString());
    }
    return  null;

}

com.auth0.jwt.exceptions.JWTDecodeException: The input is not a valid base 64 encoded string.

Puede que no estes realizando la inyección de tu TokenService

`@Autowired
  private TokenService tokenService;`
solución!

Yo tenia el mismo error. El error esta en esta linea:

 token = token.replace("Bearer"," ");

Hace falta un espacio en "Bearer "

 token = token.replace("Bearer "," ");

Entré al foro por el mismo problema, gracias Juan Pablo por la solución.

Tengo el mismo error y no se me soluciona :,v