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 .
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