package com.example.security;
|
|
import io.jsonwebtoken.Claims;
|
import io.jsonwebtoken.Jwts;
|
import io.jsonwebtoken.SignatureAlgorithm;
|
import io.jsonwebtoken.security.Keys;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.PostConstruct;
|
import java.security.Key;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.Map;
|
|
@Component
|
public class JwtTokenUtil {
|
|
@Value("${jwt.secret:data-oracle-secret-key-for-jwt-token-generation}")
|
private String secret;
|
|
@Value("${jwt.expiration:86400000}")
|
private Long expiration;
|
|
private Key key;
|
|
@PostConstruct
|
public void init() {
|
this.key = Keys.hmacShaKeyFor(secret.getBytes());
|
}
|
|
public String generateToken(Long userId, String username, String deptCode) {
|
Map<String, Object> claims = new HashMap<>();
|
claims.put("userId", userId);
|
claims.put("username", username);
|
claims.put("deptCode", deptCode);
|
return createToken(claims, username);
|
}
|
|
private String createToken(Map<String, Object> claims, String subject) {
|
return Jwts.builder()
|
.setClaims(claims)
|
.setSubject(subject)
|
.setIssuedAt(new Date(System.currentTimeMillis()))
|
.setExpiration(new Date(System.currentTimeMillis() + expiration))
|
.signWith(key, SignatureAlgorithm.HS256)
|
.compact();
|
}
|
|
public String getUsernameFromToken(String token) {
|
return getClaimsFromToken(token).getSubject();
|
}
|
|
public Long getUserIdFromToken(String token) {
|
Claims claims = getClaimsFromToken(token);
|
return claims.get("userId", Long.class);
|
}
|
|
public String getDeptCodeFromToken(String token) {
|
Claims claims = getClaimsFromToken(token);
|
return claims.get("deptCode", String.class);
|
}
|
|
private Claims getClaimsFromToken(String token) {
|
return Jwts.parserBuilder()
|
.setSigningKey(key)
|
.build()
|
.parseClaimsJws(token)
|
.getBody();
|
}
|
|
public boolean validateToken(String token) {
|
try {
|
getClaimsFromToken(token);
|
return !isTokenExpired(token);
|
} catch (Exception e) {
|
return false;
|
}
|
}
|
|
private boolean isTokenExpired(String token) {
|
Date expiration = getClaimsFromToken(token).getExpiration();
|
return expiration.before(new Date());
|
}
|
}
|