JWT
1.是什么?Json Web Token的简称
2.JWT的结构是?Header + Payload + Sign
3.如何搞
1.pom.xml加依赖
<!-- JWT相关 -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>${io.jsonwebtoken.jjwt.version}</version>
</dependency>
2.构建Token
private static final long EXPIRE = 1000 * 60 * 60 * 24 * 7;
String token = Jwts.builder()
//第一部分Header
.setHeaderParam("typ","JWT") //header中的类型
.setHeaderParam("alg","HS256") //header中加密算法
//第二部分Payload
.setSubject("主题名") //主题
.claim("key1", "value1") //需要携带的kv1
.claim("key2", "value2") //需要携带的kv2
.setIssuedAt(new Date()) //签发时间
.setExpiration(new Date(System.currentTimeMillis() + EXPIRE)) //到期时间
//第三部分Sign
.signWith(SignatureAlgorithm.HS256, "自定义的秘钥")
//拼接
.compact();
3.解密Token
public static Claims checkJWT(String token) {
Claims claims = Jwts.parser().setSigningKey("自定义的秘钥")
.parseClaimsJws(token).getBody();
return claims;
}
通过claims.get("key1")/.getXXX获取kv值。
4.流程
1.登录,用手机号查库,获得密码
2.匹配密码,正确后,生成token令牌,把用户需要全局共享的信息,放入claim(k,v)里
3.得到一个String后,返回给用户。
4.用户将这个String放入header中,对api进行请求
5.拦截器Interceptor前置方法,获取header中的token,执行解密方法checkJWT,获得Claims。
6.claims为空就是过期或者token作假,有数据就get方法,将共享值拆解,给保存在全局方法里等待使用。
注:同事使用的是,来共享全局变量
public static ThreadLocal<LoginUser> threadLocal = new ThreadLocal<>();
相关文章
- 09-16electron集成Java服务端制作windows安装包
- 09-16java-如何使用AccessibilityService.getWindows()获得可遍历的AccessibilityNodeInfo?
- 09-16java – NoSql Battle – 幸存者?
- 09-16JWT 如何解码和获得令牌失效的日期
- 09-16Java-高负载应用程序的数据库可伸缩性?
- 09-16java – JShell如何查找变量或结果的类型
- 09-16如何使用jshell运行java应用程序?
- 09-16java – 在JShell上执行时相同语句的不同行为
- 09-16java – jshell中C选项的用途是什么
- 09-16java-JShell-如何在不替换此类的情况下向现有类添加方法?