← 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:
- Sem token: GET sem Authorization → 401 UNAUTHORIZED
- Token vazio: Authorization: Bearer → 401 UNAUTHORIZED
- Token inválido: Authorization: Bearer abc123 → 403 FORBIDDEN
- 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
- ☐ Dependência jjwt adicionada
- ☐ jwt.secret configurado
- ☐ AuthService criado
- ☐ validarTokenHeader() copiado
- ☐ @RequestHeader(HttpHeaders.AUTHORIZATION) usado
- ☐ Tratamento 401 vs 403 implementado
- ☐ Testado com token válido/inválido
🎉 Pronto para Usar!
Seu sistema JWT está configurado. Para implementação completa, consulte a documentação detalhada.
🔗 Links Úteis