token 中文译 “令牌”,是一种由服务端生成的字符串,颁发给客户端使用的鉴权机制。
客户端获取到一个token后,以后无需带上用户名和密码,只需带上token即可。
身份认证论述:
HTTP是无状态协议,服务端并不清楚是谁请求了它,只有客户端带上用户的账号密码,服务端通过验证后才清楚到底是那个用户请求了它,本次请求完结后,再次请求又需要重新认证。
通用的解决办法是:用户第一次通过认证后,服务端生成一条记录,并将记录id放回给客户端,(类似与session_id),之后客户端每次请求带上这个id,服务端只需要检索这个id,找到了这条记录,就说明用户已经通过身份验证。
关于token认证的论述:
token认证的流程:用户第一次登录服务端,服务器根据用户的私有信息,时间戳,签名算法,私钥 通过算法生成token并返回给客户端,之后客户端请求只需要带上这个token即可,服务端只需对这个token进行解析,即可得知那个用户进行了操作。
私有信息: 一般为用户的信息,用户的标识等
时间戳: 当前时间
私钥: 这个比较重要,服务端自有信息。 生成token 解密时候需要它。就相当于一把锁的钥匙,用它锁上的信息,也只有用它才能解锁。不然客户端自己也可以生成token了
直接上代码:
JWTUtils.java
/**
-
ToKen工具类
-
JWT生成
*/
@Component
public class ToKenUtil {/**
-
生成Jwt
-
使用Hs256算法 私匙使用固定私钥
-
@param timeOut jwt过期时间
-
@return
*/
public static String createJWT(long timeOut,Map claims) {//指定签名的时候使用的签名算法
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;//生成JWT的时间
long nowMillis = System.currentTimeMillis();<
-