0
respostas

Quando disparo a requisição no insomnia está dando erro ao disparar requisição no insomnia

Deu erro no último comando da aula

Como pegar um novo token quando esse expirar?

@Service
public class TokenService {

    @Value("${api.security.token.secret}")
    private String secret;

    private static final Logger log = LoggerFactory.getLogger(TokenService.class);



    public String gerarToken(Usuario usuario){

        try {
            var algoritmo = Algorithm.HMAC256(secret);
            return JWT.create()
                    .withIssuer("API Voll.med")
                    .withSubject(usuario.getLogin())
                    //.withClaim("id", usuario.getId())
                    .withExpiresAt(dataExpiracao())
                    .sign(algoritmo);
        } catch (JWTCreationException exception){
            throw new RuntimeException("Erro ao gerar token jwt", exception);
        }

    }

    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){
            exception.printStackTrace();
            throw new RuntimeException("Token JWT inválido ou expirado", exception);
        }
    }



    private Instant dataExpiracao() {
        return LocalDateTime.now().plusHours(5).toInstant(ZoneOffset.of("-03:00"));//criar a data de expiração conforme o horário do Brasil

    }

}

@Component
public class SecurityFilter extends OncePerRequestFilter {

    @Autowired
    private TokenService tokenService;

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        var tokenJWT = recuperarToken(request);
        System.out.println(tokenJWT);
        var subject = tokenService.getSubject(tokenJWT);

        filterChain.doFilter(request, response);
    }

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

O código compila direitinho mas quando manda a requisição no insomnia dá erro 403 .

Print da compilação do código

Eu modifiquei essa linha do código para não deixar espaço mas agora está dando outro erro. não considerar as duas últimas imagens.

if(authorizationHeader!= null){
            return authorizationHeader.replace("Bearer ", "").trim(); // linha modificada

Insira aqui a descrição dessa imagem para ajudar na acessibilidadePrint do erro no insomnia

Eu até aumentei o tempo de expiação do token mas não deu certo

Está dando erro na linha 26 do SecurityFilter

Está dando erro na linha 52 do TokenService

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