Tokens JWT em Java: guia completo para trabalhar com JSON Web Tokens

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Tokens JWT em Java: criação, verificação e uso



JSON Web Token (JWT) é uma forma compacta e autossuficiente de transmitir informações entre partes na forma de um objeto JSON. Em Java, o JWT é amplamente utilizado para autenticação, autorização e troca de dados em APIs REST e arquitetura de microsserviços. Neste artigo, abordaremos as duas bibliotecas mais populares para trabalhar com JWT em Java — JJWT (Java JWT) da Stormpath e java-jwt da Auth0, além de vermos a integração com Spring Security.



O que é JWT e por que ele é necessário?



O JWT é composto por três partes, separadas por pontos:

  • Header — cabeçalho contendo o tipo do token e o algoritmo de assinatura (ex.: HS256 ou RS256).
  • Payload — carga útil com as declarações (claims), como identificador do usuário, papéis, prazo de validade.
  • Signature — assinatura criada com base no header, payload e chave secreta.


Em Java, o JWT é mais frequentemente usado para:

  • Autenticação de usuários sem armazenar sessões no servidor (stateless).
  • Transmissão de permissões de acesso entre microsserviços.
  • Tokens de uso único para redefinição de senha ou confirmação de email.


Biblioteca JJWT (io.jsonwebtoken)



JJWT é a biblioteca mais popular para trabalhar com JWT em Java. Ela é simples de usar, suporta todos os algoritmos padrão (HS256, RS256, ES256) e é ativamente atualizada.



Adicionando JJWT via Maven

<dependency>    <groupId>io.jsonwebtoken</groupId>    <artifactId>jjwt-api</artifactId>    <version>0.12.6</version></dependency><dependency>    <groupId>io.jsonwebtoken</groupId>    <artifactId>jjwt-impl</artifactId>    <version>0.12.6</version>    <scope>runtime</scope></dependency><dependency>    <groupId>io.jsonwebtoken</groupId>    <artifactId>jjwt-jackson</artifactId>    <version>0.12.6</version>    <scope>runtime</scope></dependency>


Criação de um token JWT

import io.jsonwebtoken.Jwts;import io.jsonwebtoken.SignatureAlgorithm;import io.jsonwebtoken.security.Keys;import javax.crypto.SecretKey;import java.util.Date;

public class JwtExample { public static void main(String[] args) { // Geração de uma chave secreta segura para HS256 SecretKey key = Keys.secretKeyFor(SignatureAlgorithm.HS256);

String token = Jwts.builder() .subject("user123") .claim("role", "admin") .issuedAt(new Date()) .expiration(new Date(System.currentTimeMillis() + 3600000)) // 1 hora .signWith(key) .compact();

System.out.println("JWT criado: " + token); }}


Verificação e análise de JWT

import io.jsonwebtoken.Claims;import io.jsonwebtoken.Jws;import io.jsonwebtoken.JwtException;import io.jsonwebtoken.Jwts;

public class JwtParserExample { public static void main(String[] args) { String jwtToken = "eyJhbGciOiJIUzI1NiJ9..."; // seu token SecretKey key = ...; // a mesma chave usada na criação

try { Jws<Claims> claimsJws = Jwts.parser() .verifyWith(key) .build() .parseSignedClaims(jwtToken);

Claims claims = claimsJws.getPayload(); System.out.println("Subject: " + claims.getSubject()); System.out.println("Role: " + claims.get("role")); System.out.println("Expiration: " + claims.getExpiration()); } catch (JwtException e) { System.out.println("Token inválido: " + e.getMessage()); }

Recommendations