sakthivikram/geo-location
0
1package com.georeport.security;2 3import io.jsonwebtoken.*;4import io.jsonwebtoken.security.Keys;5import org.springframework.beans.factory.annotation.Value;6import org.springframework.security.core.Authentication;7import org.springframework.security.core.userdetails.UserDetails;8import org.springframework.stereotype.Component;9 10import javax.crypto.SecretKey;11import java.nio.charset.StandardCharsets;12import java.util.Date;13 14/**15 * JWT Token Provider for generating and validating JWT tokens.16 * Handles token creation, validation, and claim extraction.17 */18@Component19public class JwtTokenProvider {20 21 @Value("${jwt.secret}")22 private String jwtSecret;23 24 @Value("${jwt.expiration}")25 private Long jwtExpiration;26 27 /**28 * Generate signing key from secret29 */30 private SecretKey getSigningKey() {31 byte[] keyBytes = jwtSecret.getBytes(StandardCharsets.UTF_8);32 return Keys.hmacShaKeyFor(keyBytes);33 }34 35 /**36 * Generate JWT token from Authentication object37 */38 public String generateToken(Authentication authentication) {39 UserDetails userDetails = (UserDetails) authentication.getPrincipal();40 return generateToken(userDetails.getUsername());41 }42 43 /**44 * Generate JWT token from email45 */46 public String generateToken(String email) {47 Date now = new Date();48 Date expiryDate = new Date(now.getTime() + jwtExpiration);49 50 return Jwts.builder()51 .subject(email)52 .issuedAt(now)53 .expiration(expiryDate)54 .signWith(getSigningKey())55 .compact();56 }57 58 /**59 * Get email (subject) from JWT token60 */61 public String getEmailFromToken(String token) {62 Claims claims = Jwts.parser()63 .verifyWith(getSigningKey())64 .build()65 .parseSignedClaims(token)66 .getPayload();67 68 return claims.getSubject();69 }70 71 /**72 * Validate JWT token73 */74 public boolean validateToken(String token) {75 try {76 Jwts.parser()77 .verifyWith(getSigningKey())78 .build()79 .parseSignedClaims(token);80 return true;81 } catch (MalformedJwtException ex) {82 System.err.println("Invalid JWT token");83 } catch (ExpiredJwtException ex) {84 System.err.println("Expired JWT token");85 } catch (UnsupportedJwtException ex) {86 System.err.println("Unsupported JWT token");87 } catch (IllegalArgumentException ex) {88 System.err.println("JWT claims string is empty");89 }90 return false;91 }92 93 /**94 * Get expiration duration in milliseconds95 */96 public Long getExpirationMs() {97 return jwtExpiration;98 }99}100 