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中存放的一个时间属性进行判断的。