jwt使用

需要引入jwt依赖

        <dependency>
              <groupId>com.auth0</groupId>
              <artifactId>java-jwt</artifactId>
              <version>3.4.0</version>
        </dependency>

测试demo

    public static void demo() {        
        Map<String,Object> payload = new HashMap<>();
        payload.put("sub", "1234567890");
        payload.put("name", "John Doe");
        payload.put("admin", true);
        
        String result = JWT.create()
            .withClaim("sub", "1234567890")
            .withClaim("name", "John Doe")
            .withClaim("admin", true)
            .withClaim("time", "2021-03-09 18:25:00")
            .withExpiresAt(new Date()) // 实质上就是在payload中添加一个exp的时间属性
            // sign方法会根据Algorithm自动在header中添加alg与typ
            .sign(Algorithm.HMAC256("123456")); 
        System.out.println(result);
        DecodedJWT jwt = JWT.decode(result);
        System.out.println(jwt.getHeader());
        System.out.println("---------------------------------消息体");
        Map<String, Claim> claims = jwt.getClaims();
        for (String key : claims.keySet()) {
            System.out.println("key="+key+",value="+(claims.get(key).asString()==null?claims.get(key).asDate():claims.get(key).asString()));
        }
        System.out.println(jwt.getExpiresAt());
    }

使用感觉:jwt就是一项非状态会话机制,可以将需要保存到session中的数据保存到cookie--token中,jwt就是一项防篡改的技术;

将需要保存的数据都放入到payload中,然后使用密钥加密,当发起请求的时候,在服务器上将接收的token,将header和payload进行加密,然后和token中的加密部分进行匹对,如果对的上,就表明数据没有被篡改,否则就是被篡改过的数据

至于token是否是在有效期,是payload中存放的一个时间属性进行判断的。

 

posted @ 2021-03-09 18:55  理舞  阅读(150)  评论(0编辑  收藏  举报