1. 什么是JWT
JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息,
微服务中实现JWT主要分有以下几步:
- 引入依赖
- 生成TOKEN
- 解析TOKEN
具体实现如下:
引入依赖
pom文件添加JWT
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.6.0</version>
</dependency>
2. 创建CreateJwtTest用于生成token
CreateJwtTest代码如下
public class CreateJwt {
public static void main(String[] args) {
JwtBuilder jwtBuilder= Jwts.builder()
.setId("666")
.setSubject("小马")
.setIssuedAt(new Date())
.signWith(SignatureAlgorithm.HS256,"yixin")
.setExpiration(new Date(new Date().getTime()+60000))
.claim("role","admin");
System.out.println(jwtBuilder.compact());
}
}
setIssuedAt用于设置签发时间
signWith用于设置签名秘钥
测试运行输出如下结果:
eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI2NjYiLCJzdWIiOiLlsI_pqawiLCJpYXQiOjE1NjEzNDIxOTgsImV4cCI6MTU2MTM0MjI1OCwicm9sZSI6ImFkbWluIn0.WGNetFU9Ncb8IERZwQVDExwsKZToxLVBLJ_Gohv3RtI
3. 创建ParseJwtTest用于解析token
ParseJwtTest代码如下
public class PraseJwt {
public static void main(String[] args) {
try {
Claims claims=Jwts.parser().setSigningKey("yixin")
.parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI2NjYiLCJzdWIiOiLlsI_pqawiLCJpYXQiOjE1NjEzNDIxOTgsImV4cCI6MTU2MTM0MjI1OCwicm9sZSI6ImFkbWluIn0.WGNetFU9Ncb8IERZwQVDExwsKZToxLVBLJ_Gohv3RtI")
.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"));
} catch (ExpiredJwtException e) {
System.out.println("Token已过期,请重新获取");
}
}
}
将CreateJwtTest生成的token放入解析可得:
注意:我设置的生成token有效时间是6000ms,超过这个时间会返回
该文章涉及的源码请移步这里查看