jwt的demo练习

文章目录

  • jwt的使用方式
    • jwt简介
    • jwt的简单操作方式

jwt的使用方式

jwt简介

JWT(JSON WEB TOKEN):JSON网络令牌,JWT是一个轻便的安全跨平台传输格式,定义了一个紧凑的自包含的方式在不同实体之间安全传输信息(JSON格式)。它是在Web环境下两个实体之间传输数据的一项标准。实际上传输的就是一个字符串。广义上讲JWT是一个标准的名称;狭义上JWT指的就是用来传递的那个token字符串

jwt的简单操作方式

public class Test {
    public static void main(String[] args) {
        Date date = new Date();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_MONTH,+1);//+1今天的时间加一天
        date = calendar.getTime();
        Test test = new Test();
        String s = test.buildJwt(new Date());
        System.out.println(s);
        boolean valid = test.isJwtValid(s);
        System.out.println(valid);
    }

    public void jwtTest() throws InterruptedException {
        // 设置3秒后过期
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        long time = System.currentTimeMillis() + 30 * 60 * 1000;
        String jwt = this.buildJwt(new Date(time));
        System.out.println("jwt = " + jwt);
        // 验证token是否可用
        boolean isOk = this.isJwtValid(jwt);
        System.out.println(isOk);
    }
    
    // 生成jwt令牌
    public String buildJwt(Date exp) {
        String jwt = Jwts
                .builder()
                //SECRET_KEY是加密算法对应的密钥,这里使用额是HS256加密算法
                .signWith(SignatureAlgorithm.HS256, "123456789")
                //expTime是过期时间
                .setExpiration(exp)
                .setSubject("{\"userid\":\"1\",\"usename\":\"管理员\",\"orgid\":\"999000001\"}")
                .compact();
        return jwt;
    }
    
    // 解密jwt令牌
    public boolean isJwtValid(String jwt) {
        try {
            //解析JWT字符串中的数据,并进行最基础的验证
            Claims claims = Jwts.parser()
                    //SECRET_KEY是加密算法对应的密钥,jjwt可以自动判断机密算法
                    .setSigningKey("SIRM_CLOUD_2018")
                    //jwt是JWT字符串
                    .parseClaimsJws(jwt)
                    .getBody();
            System.out.println(claims);
            return true;
            //在解析JWT字符串时,如果密钥不正确,将会解析失败,抛出SignatureException异常,说明该JWT字符串是伪造的
            //在解析JWT字符串时,如果‘过期时间字段’已经早于当前时间,将会抛出ExpiredJwtException异常,说明本次请求已经失效
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
}

你可能感兴趣的:(jwt)