Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
11
respostas

[Dúvida] Metodo verify não esta funcionando

Prezado, me deparei com um probleminha aqui que não consegui resolver.

No meu método para validar de o Token JWT é válido, o método verify(tokenJWT) não valida o token e sempre cai na exceção.

Segue o método

public String getSubject(String tokenJWT){
    try {
        var algorithm = Algorithm.HMAC256(secret);
        return JWT.require(algorithm)
                .withIssuer("API Voll.med")
                .build()
                .verify(tokenJWT)
                .getSubject();
    } catch (JWTVerificationException exception) {
        throw new RuntimeException("Token JWT inválido ou expirado!");
    }
}


O método getSubject esta sendo chamado na classe SecurityFilter mapeada com a anotation @Component. Nessa classe, sem chamar o

método da classe que valida o token, a fila flui normalmente sem erro, porem o token não é validado. Quando aciono o método pra validar,

ai cai na exceção de que o tokem não é valido ou expirou.




 private String recuperarToken(HttpServletRequest request){
    var authorizationHeader = request.getHeader("Authorization");
    if (authorizationHeader == null){
        throw new RuntimeException("Token JWT não foi enviado ao cabeçalho Authorization!");
    }

    return authorizationHeader.replace("Bearer", " ");
}


Não consegui identificar nenhum erro nos códigos, mas mesmo assim, o tokem sempre é invalido.

Alguem sabe como resolver?

11 respostas

Oi!

O problema está nessa sua linha de código:

return authorizationHeader.replace("Bearer", " ");

O correto é:

return authorizationHeader.replace("Bearer ", "");

Bons estudos!

Boa noite professor fiz as auteraçoes que o senhor passor e continua dando o mesmo erro esta com token falido, esta com a modificação no filter que e pra bater primeiramente no meu filter e validar o token depois que bate no filter do spring mais perssiste o mesmo erro

Manda aqui os códigos completos das suas classes TokenService e SecurityFilter.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

A princípio o código está certinho.

Dispara uma requisição para efetuar login e veja se vai ser devolvido um token na resposta e depois usa esse novo token para testar outra requisição.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

solução!

Professor encontrei o erro estava passado o token com as "aspas" muito obrigado mestre!!