JJWT實現token創建和解析的JwtUtil工具類。


package com.*.util;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;
import java.util.Map;

/**
 * ConfigurationProperties注解:在 Spring Boot 項目中大量的參數配置,在 application.properties
 * 或 application.yml 文件中,通過 @ConfigurationProperties 注解,我們可以方便的獲取
 * 這些參數值,application.yml 文件本身支持list類型所以在application.yml 文件中可以這樣配置:
 *        jwt:
 *          config:
 *            key: 自定義私鑰key值
 *            timeOut: 有效時間(毫秒單位)
 */
@ConfigurationProperties("jwt.config")
public class JwtUtil {
    //簽名私鑰
    private String key;
    //簽名有效時間
    private Long timeOut;

    public String getKey() {
        return key;
    }
    public void setKey(String key) {
        this.key = key;
    }
    public Long getTimeOut() {
        return timeOut;
    }
    public void setTimeOut(Long timeOut) {
        this.timeOut = timeOut;
    }

    /**
     * 設置認證token
     *      id:用戶id
     *      subject:用戶名
     */
    public String createJwt(String id, String name, Map<String,Object> map) {
        //1.設置失效時間
        long nowTime = System.currentTimeMillis();//當前毫秒
        long expirationTime = nowTime + timeOut;
        //2.創建jwtBuilder
        JwtBuilder jwtBuilder = Jwts.builder();
        //3.根據map設置claims
        //當設置的是整個map時,就需放在最前面,下面的setId等參數才會有效,否則會把前面set的值置空
        jwtBuilder.setClaims(map);
        jwtBuilder.setId(id);
        jwtBuilder.setSubject(name);
        jwtBuilder.setIssuedAt(new Date());//設置當前時間
        jwtBuilder.signWith(SignatureAlgorithm.HS256, key);//設置加密方式
        jwtBuilder.setExpiration(new Date(expirationTime));//設置過期時間
        //4.創建token
        String token = jwtBuilder.compact();
        return token;
    }

    /**
     * 解析token字符串獲取clamis
     */
    public Claims parseJwt(String token) {
        Claims claims = Jwts.parser().setSigningKey(key).parseClaimsJws(token).getBody();
        return claims;
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM