JWT初學-生成與解密

JWT初學-簡單瞭解一下

demo代碼git地址

jwt的maven依賴

<dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.0</version>
        </dependency>

json和實體類互轉的依賴

<dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.5</version>
        </dependency>

首先生成加密的祕鑰

public SecretKey generalKey(){
        SecretKey secretKey = new SecretKeySpec(secret.getBytes(),SignatureAlgorithm.HS256.getJcaName());
        return secretKey;
    }

創建jwt(加密算法+過期時間+實體內容+祕鑰)

public String createJWT(String id,String subject){
        //加密算法
        SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
        //設置時間
        Calendar calendar = Calendar.getInstance();
        Date date = calendar.getTime();
        //過期時間
        calendar.setTimeInMillis(date.getTime()+millis);
        Date expirationDate = calendar.getTime();
        SecretKey secretKey = generalKey();
        JwtBuilder builder = Jwts.builder()
                .setId(id)
                .setIssuedAt(date)
                .setSubject(subject)
                .signWith(signatureAlgorithm,secretKey)
                .setExpiration(expirationDate);
        return builder.compact();
    }

解碼jwt

public String parseJWT(String jwt){
        SecretKey secretKey = generalKey();
        return Jwts.parser().setSigningKey(secretKey).parseClaimsJws(jwt).getBody().getSubject();
    }

獲取過期時間

public Date expirateTime(String jwt){
        SecretKey secretKey = generalKey();
        return Jwts.parser().setSigningKey(secretKey).parseClaimsJws(jwt).getBody().getExpiration();
    }

我們在操作jwt時,傳入參數和返回的參數都是json字符串

public class Json {

    /**
     * 將對象轉化成json字符串
     * @param object
     * @return
     */
    public String objetcToJson(Object object){
        Gson gson = new Gson();
        return gson.toJson(object);
    }

    public Object jsonToObject(String json,Class beanClass){
        Gson gson = new Gson();
        return gson.fromJson(json,beanClass);
    }
}

實體類對象

public class UserPo {
    private String id;
    private String name;
    private int age;
    private boolean isMan;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public boolean isMan() {
        return isMan;
    }

    public void setMan(boolean man) {
        isMan = man;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章