Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

[Dúvida] Não consigo retornar o subject

estou usando:

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

retorna este erro:

2023-01-18T09:35:59.243-03:00 ERROR 8420 --- [nio-8080-exec-8] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception

java.lang.RuntimeException: Token JWT inválido ou expirado!

Caused by: java.lang.IllegalArgumentException: Illegal base64 character 20

aula: https://cursos.alura.com.br/course/spring-boot-aplique-boas-praticas-proteja-api-rest/task/117169

6 respostas
solução!

Oi Fabiano!

Provavelmente o problema está no código da classe SecurityFilter, na lógica de recuperar o token do header Authorization:

private String recuperarToken(HttpServletRequest request) {
    var authorizationHeader = request.getHeader("Authorization");
    if (authorizationHeader != null) {
        return authorizationHeader.replace("Bearer ", "");
    }

    return null;
}

Deve ser nessa linha:

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

Depois da palavra Bearer tem um espaço em branco, que no seu código deve estar faltando.

Deu certo! Muito Obrigado mesmo! Em pensar que passei muitas horas perdidas por um espaço, mas faz parte do aprendizado.

abraços...

Eu também tive esse problema. Imaginar que era só um espaço kk

Recebi o mesmo erro, mas não está faltando o espaço após o Bearer. Alguém tem alguma ideia do que pode estar acontecendo?

Oi Eric!

Coloca um System.out.println(token) para ver no console o valor que está chegando.

Oi, Rodrigo, obrigado pela resposta. O valor que está chegando é o mesmo valor de token que estou passando nas requisições no Insomnia, mas sigo recebendo a mensagem abaixo:

{
    "timestamp": "2023-02-08T18:15:28.950+00:00",
    "status": 500,
    "error": "Internal Server Error",
    "message": "Token JWT inválido ou expirado",
    "path": "/medicos"
}