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;
    }
}

 

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