From 4b67ba9995844cf62426e33c1a9fe11c1e89b886 Mon Sep 17 00:00:00 2001 From: litoral05 Date: Wed, 3 Jun 2026 14:13:10 +0100 Subject: [PATCH] Add jwt token parsing --- .../auth/JwtDebugController.java | 28 ++++++++++++ .../backend_gateway/security/JwtService.java | 44 +++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 src/main/java/com/litoralregas/backend_gateway/auth/JwtDebugController.java diff --git a/src/main/java/com/litoralregas/backend_gateway/auth/JwtDebugController.java b/src/main/java/com/litoralregas/backend_gateway/auth/JwtDebugController.java new file mode 100644 index 0000000..e2b0a49 --- /dev/null +++ b/src/main/java/com/litoralregas/backend_gateway/auth/JwtDebugController.java @@ -0,0 +1,28 @@ +package com.litoralregas.backend_gateway.auth; + +import com.litoralregas.backend_gateway.security.JwtService; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +@RestController +@RequestMapping("/debug/jwt") +public class JwtDebugController { + + private final JwtService jwtService; + + public JwtDebugController(JwtService jwtService) { + this.jwtService = jwtService; + } + + @PostMapping + public Map debug(@RequestBody String token) { + + return Map.of( + "valid", jwtService.isValid(token), + "username", jwtService.extractUsername(token), + "clientId", jwtService.extractClientId(token), + "role", jwtService.extractRole(token) + ); + } +} \ No newline at end of file diff --git a/src/main/java/com/litoralregas/backend_gateway/security/JwtService.java b/src/main/java/com/litoralregas/backend_gateway/security/JwtService.java index 94ea165..466e773 100644 --- a/src/main/java/com/litoralregas/backend_gateway/security/JwtService.java +++ b/src/main/java/com/litoralregas/backend_gateway/security/JwtService.java @@ -1,6 +1,8 @@ package com.litoralregas.backend_gateway.security; import com.litoralregas.backend_gateway.user.UserEntity; +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.JwtException; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.security.Keys; import org.springframework.stereotype.Service; @@ -39,4 +41,46 @@ public class JwtService { jwtProperties.getSecret().getBytes(StandardCharsets.UTF_8) ); } + + private Claims getClaims(String token) { + + return Jwts.parser() + .verifyWith(getSigningKey()) + .build() + .parseSignedClaims(token) + .getPayload(); + } + + public boolean isValid(String token) { + + try { + getClaims(token); + return true; + } catch (JwtException ex) { + return false; + } + } + + public String extractUsername(String token) { + return getClaims(token).getSubject(); + } + + public Long extractClientId(String token) { + + Object value = getClaims(token).get("clientId"); + + if (value instanceof Integer integer) { + return integer.longValue(); + } + + if (value instanceof Long longValue) { + return longValue; + } + + return Long.parseLong(value.toString()); + } + + public String extractRole(String token) { + return getClaims(token).get("role", String.class); + } } \ No newline at end of file