iT邦幫忙

2024 iThome 鐵人賽

DAY 14
0

isTokenValid 方法用於驗證Token的有效性。它首先提取Token中的用戶名,然後檢查用戶名是否與 UserDetails 中的用戶名一致,同時確認Token是否過期。

public boolean isTokenValid(String token, UserDetails userDetails) {
    final String username = extractClaims(token, Claims::getSubject);
    return username.equals(userDetails.getUsername()) && !isTokenExpired(token);
}

這個私有方法用於檢查Token是否已經過期,通過比較當前日期和Token的過期日期。

private boolean isTokenExpired(String token) {
    return extractExpiration(token).before(new Date());
}

extractExpiration 方法通過 extractClaims 提取Token的過期日期。

private java.util.Date extractExpiration(String token) {
    return extractClaims(token, Claims::getExpiration);
}

這個私有方法實際上執行了JWT的解析,通過使用密鑰來解碼Token並提取其中的聲明。

private Claims extractClaims(String token) {
    return Jwts
        .parserBuilder()
        .setSigningKey(getSignInKey())
        .build()
        .parseClaimsJws(token)
        .getBody();
}

getSignInKey 方法用來獲取JWT簽名和解碼所需的密鑰。這個密鑰是通過Base64編碼的字符串轉換而來。

private Key getSignInKey() {
    byte[] keyBytes = Decoders.BASE64.decode(SECRET_KEY);
    return Keys.hmacShaKeyFor(keyBytes);
}

在這篇文章中,我們詳細介紹了 JwtService 類別的實現及其主要功能。此服務負責生成、解析和驗證JWT token,確保在應用中安全地處理認證和授權。通過理解 JwtService 中的各個方法和流程,我們可以更好地掌握JWT的運作機制,並在開發安全的網絡應用中得心應手。


上一篇
Day 13 JWT認證服務 1
下一篇
Day 15 AuthenticationFilter 2
系列文
Spring Boot微服務架構:API設計與實現28
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言