4.JWT入门案例
JWT入门案例
一、简介
JSON Web token简称JWT, 是用于对应用程序上的用户进行身份验证的标记。也就是说, 使用 JWTS 的应用程序不再需要保存有关其用户的 cookie 或其他session数据。此特性便于可伸缩性, 同时保证应用程序的安全
二、格式
- JWT就是一个字符串,经过加密处理与校验处理的字符串,形式为:A.B.C
- A由JWT头部信息header加密得到
- B由JWT用到的身份验证信息json数据加密得到
- C由A和B加密得到,是校验部分
三、代码实现
3.1引入依赖
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
3.2生成token
/**
* 生成token
*/
@Test
public void createToken(){
//1.准备数据
Map<String,Object> shuiaGe = new HashedMap();
shuiaGe.put("id",19040123);
shuiaGe.put("phoneNumber","18177760987");
//2.利用JWT工具类生成token
long nowTime = System.currentTimeMillis();
String token = Jwts.builder()
.signWith(SignatureAlgorithm.HS512, "ZhangDaShuaiGe")//指定加密算法和秘钥
.setClaims(shuiaGe)//要加密处理的数据
.setExpiration(new Date(nowTime + 5000))//失效时间
.compact();
System.out.println(token);
}
3.3解析token
/**
* 解析token
*/
@Test
public void parseToken (){
//1.要解析的token
String tokrn = "eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE2NjU2NTA2NDcsInBob25lTnVtYmVyIjoiMTgxNzc3NjA5ODciLCJpZCI6MTkwNDAxMjN9.rkfsdgDy8ezCNvcCT-QjhlHLPe1_6TNJx_CZMGkUKXm03y6yYOG5jS292__13yb9sLltzIu9voxtIwPa2l4bkA";
try {
//2.利用JWT工具类解析token
Claims zhangDaShuaiGe = Jwts.parser()
.setSigningKey("ZhangDaShuaiGe")//秘钥
.parseClaimsJws(tokrn)//要解析的token
.getBody();
Object id = zhangDaShuaiGe.get("id");
String phoneNumber = (String) zhangDaShuaiGe.get("phoneNumber" );
System.out.println(id+":"+phoneNumber);
} catch (ExpiredJwtException e) {
System.out.println("token已过期");
} catch (SignatureException e) {
System.out.println("token不合理");
}
}