开篇
实现Token的方式有很多,本篇介绍的是利用Json Web Token(JWT)生成的Token.JWT生成的Token有什么好处呢?
安全性比较高,加上密匙加密而且支持多种算法。
携带的信息是自定义的,而且可以做到验证token是否过期。
验证信息可以由前端保存,后端不需要为保存token消耗内存。
本篇分3部分进行讲解。
什么是JWT
JWT的代码实现
用HS256 对称算法加密
用RS256 非对称算法加密
总结
如果原理很难懂,没关系。可以直接看JWT的代码实现。代码已经上传github。已经对代码进行封装成工具类。可以直接使用。
什么是JWT
JSON Web Token 简称JWT。
一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名。
JWT生成的token是这样的
eyJpc3MiOiJKb2huI.eyJpc3MiOiJ.Kb2huIFd1IEp
生成的token,是3段,用.连接。下面有解释。
头部
用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。这也可以被表示成一个JSON对象。
例如:
{
"typ": "JWT",
"alg": "HS256"
}
载荷
其实就是自定义的数据,一般存储用户Id,过期时间等信息。也就是JWT的核心所在,因为这些数据就是使后端知道此token是哪个用户已经登录的凭证。而且这些数据是存在token里面的,由前端携带,所以后端几乎不需要保存任何数据。
例如:
{
"uid": "xxxxidid", //用户id
"exp": "12121212" //过期时间
}
签名
签名其实就是:
1.头部和载荷各自base64加密后用.连接起来,然后就形成了xxx.xx的前两段token。
2.最后一段token的形成是,前两段加入一个密匙用HS256算法或者其他算法加密形成。
所以token3段的形成就是在签名处形成的。
代码实现
1.看代码前一定要知道JWT是由头部、载荷与签名组成。
2.代码已上传github,希望点个赞
代码将JWT封装成两个工具类,可以直接调用。
需要下载的jar包
com.nimbusds
nimbus-jose-jwt
6.0
HS256 对称加密
生成token
/**
* 创建秘钥
*/
private static final byte[] SECRET = "6MNSobBRCHGIO0fS6MNSobBRCHGIO0fS".getBytes();
/**
* 过期时间5秒
*/
private static final long EXPIRE_TIME = 1000 * 5;
<