Olá Jonnathy!
Para retornar tanto o login quanto o ID do usuário a partir do token JWT, você pode utilizar o método getClaim
para obter as informações adicionais que foram armazenadas no token. Vou te mostrar como você pode fazer isso.
Primeiro, vamos ajustar o método pegarSubject
para que ele também retorne o ID do usuário. Aqui está um exemplo de como você pode fazer isso:
import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTVerificationException;
public class TokenService {
private String secreto = "seuSegredoAqui"; // Substitua pelo seu segredo
public Usuario pegarDadosUsuario(String tokenJWT) {
try {
var algoritmo = Algorithm.HMAC256(secreto);
var verifier = JWT.require(algoritmo)
.withIssuer("API Voll.med")
.build();
var decodedJWT = verifier.verify(tokenJWT);
String login = decodedJWT.getSubject();
String id = decodedJWT.getClaim("id").asString();
return new Usuario(login, id); // Supondo que você tenha uma classe Usuario com login e id
} catch (JWTVerificationException exception) {
throw new RuntimeException("Token JWT inválido ou expirado!");
}
}
}
class Usuario {
private String login;
private String id;
public Usuario(String login, String id) {
this.login = login;
this.id = id;
}
// Getters e setters, se necessário
}
Neste exemplo, pegarDadosUsuario
retorna um objeto Usuario
que contém tanto o login quanto o ID. Certifique-se de que o token JWT foi criado com a claim "id" incluída, por exemplo:
String token = JWT.create()
.withIssuer("API Voll.med")
.withSubject(usuario.getLogin())
.withClaim("id", usuario.getId())
.sign(Algorithm.HMAC256(secreto));
Agora, você pode chamar pegarDadosUsuario
no seu filtro de segurança:
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
var tokenJWT = recuperarToken(request);
var usuario = tokenService.pegarDadosUsuario(tokenJWT);
System.out.println("Login: " + usuario.getLogin() + ", ID: " + usuario.getId());
filterChain.doFilter(request, response);
}
Espero ter ajudado e bons estudos!