<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.6.0</version> </dependency>
新建一個生成token的類java
package com.example.demo.controller; import io.jsonwebtoken.JwtBuilder; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import java.util.Date; public class CreateJwt { public static void main(String[] args) { //Jwts.builder()生成 //Jwts.parser()驗證 JwtBuilder jwtBuilder = Jwts.builder() .setId("123") .setSubject("夢陽") //用戶名 .setIssuedAt(new Date())//登陸時間 .signWith(SignatureAlgorithm.HS256, "my-123").setExpiration(new Date(new Date().getTime()+60000))//設置過時時間 .claim("role","admin"); //自定義屬性 //前三個爲載荷playload 最後一個爲頭部 header System.out.println(jwtBuilder.compact()); } }
運行結果爲:web
eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI2NjYiLCJzdWIiOiLlsI_pqawiLCJpYXQiOjE1NjMyODU2MTB9.iKtLy0T5ZzvzS2sjgcs5WyuM7cofmnzxzml7wicrTnAjson
package com.example.demo.controller; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import java.text.SimpleDateFormat; //token的解析 //有狀態登陸 服務器端保存用戶信息 //無狀態登陸 服務器端沒有保存用戶信息 無狀態效率比有狀態效率高 public class PraseJwtTest { public static void main(String[] args) { Claims claims = Jwts.parser() .setSigningKey("my-123") //.parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI2NjYiLCJzdWIiOiLlsI_pqawiLCJpYXQiOjE1NjMyODU2MTB9.iKtLy0T5ZzvzS2sjgcs5WyuM7cofmnzxzml7wicrTnA") .parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxMjMiLCJzdWIiOiLmoqbpmLMiLCJpYXQiOjE1ODIwMDM5MzIsImV4cCI6MTU4MjAwMzk5Miwicm9sZSI6ImFkbWluIn0.vN0pcBVNIixcqp6MsSmGWWVyCc4uOkTpcd8MUDHcn4A") .getBody(); System.out.println("用戶id:"+claims.getId()); System.out.println("用戶名:"+claims.getSubject()); System.out.println("用戶時間:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(claims.getIssuedAt()));System.out.println("過時時間:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(claims.getExpiration())); System.out.println("用戶角色:"+claims.get("role")); } }
運行結果爲:
用戶id:123
用戶名:夢陽
用戶時間:2020-02-18 13:32:12
過時時間:2020-02-18 13:33:12
用戶角色:admin服務器