← Voltar para Documentação

⚡ Template Rápido - Sistema JWT

🚀 Implementação Rápida em 5 Passos

Use este template para implementar rapidamente autorização JWT em qualquer controller Spring Boot.

🆕 v3.0.4: Inclui suporte ao idEmpresa opcional no endpoint de geração de tokens!

Passo 1: Dependência Maven

Adicione no seu pom.xml:

<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency>

Passo 2: Configuração

Adicione no application.properties:

jwt.secret=your-secret-key-here-min-32-chars

Passo 3: AuthService

Crie a classe AuthService.java:

package com.seuapp.util; import org.springframework.stereotype.Service; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; @Service public class AuthService { public Claims validarToken(String token, String segredo) { return Jwts.parser() .setSigningKey(segredo) .parseClaimsJws(token) .getBody(); } }

Passo 4: Template do Controller

Copie e cole este template no seu controller:

@RestController @RequestMapping("/api") public class SeuController { @Autowired private AuthService authService; @Value("${jwt.secret}") private String jwtSecret; // 🔒 MÉTODO DE VALIDAÇÃO - COPIE EXATAMENTE private Claims validarTokenHeader(String token) { if (token == null || token.trim().isEmpty()) { throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "Token não fornecido. Use Authorization: Bearer <token>"); } try { String t = token.trim(); if (t.toLowerCase().startsWith("bearer ")) { t = t.substring(7).trim(); } if (t.isEmpty()) { throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "Token Bearer vazio."); } return authService.validarToken(t, jwtSecret); } catch (ResponseStatusException e) { throw e; } catch (Exception e) { throw new ResponseStatusException(HttpStatus.FORBIDDEN, "Token inválido: " + e.getMessage()); } } // 🔒 ENDPOINT PROTEGIDO - EXEMPLO @GetMapping("/dados-protegidos") public String getDados(@RequestHeader(HttpHeaders.AUTHORIZATION) String token) { try { Claims claims = validarTokenHeader(token); String userId = claims.getSubject(); // SUA LÓGICA AQUI return "Sucesso! Usuário: " + userId; } catch (ResponseStatusException e) { throw e; } catch (Exception e) { throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "Erro interno: " + e.getMessage()); } } }

Passo 5: Imports Necessários

Adicione estes imports no topo da classe:

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; import org.springframework.web.server.ResponseStatusException; import io.jsonwebtoken.Claims;

🧪 Teste Rápido

Testando com Postman/Insomnia:

  1. Sem token: GET sem Authorization → 401 UNAUTHORIZED
  2. Token vazio: Authorization: Bearer → 401 UNAUTHORIZED
  3. Token inválido: Authorization: Bearer abc123 → 403 FORBIDDEN
  4. Token válido: Authorization: Bearer {seu_jwt} → 200 OK

🔄 Para Endpoints Adicionais

// Para cada novo endpoint protegido: @GetMapping("/outro-endpoint") public String outroEndpoint(@RequestHeader(HttpHeaders.AUTHORIZATION) String token) { try { Claims claims = validarTokenHeader(token); // SEMPRE PRIMEIRO // Sua lógica específica aqui return "Resultado do endpoint"; } catch (ResponseStatusException e) { throw e; // Re-throw erros HTTP } catch (Exception e) { throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "Erro interno: " + e.getMessage()); } }

📋 Checklist Rápido

🎉 Pronto para Usar!

Seu sistema JWT está configurado. Para implementação completa, consulte a documentação detalhada.

🔗 Links Úteis