为网络应用环境间传递声明而执行一种基于JSON开放标准
(1.2)JWT认证用户身份信息:认证成功,才可获取其它资源,如:用户登录
(1.3)JWT最重要作用:对 token信息防伪
(1.4)JWT的原理:一个JWT由三个部分组成:公共部分、私有部分、签名部分。最后由这三者组合进行
base64编码得到JWT
如图:
(1.4.1)公共部分
主要是该JWT的相关配置参数,比如签名的加密算法、格式类型、过期时间等等
Key=ATGUIGU
(1.4.2)私有部分
用户自定义的内容,根据实际需要真正要封装的信息
userInfo{用户Id,用户昵称nickName}
(1.4.3)签名部分
SaltiP:当前服务器的IP地址!{linux 中配置代理服务器IP}
主要用户对JWT生成字符串的时候,进行加密{盐值}
最终组成:key+salt+userInfo è token!
base64编码:并不是加密,只是把明文信息变成了不可见的字符串
但是其实只要用一些工具就 ,可以把base64编码解成明文
所以不要在JWT中放入涉及私密信息
2.官网:JSON Web Token Introduction - jwt.iohttps://jwt.io/introduction
3.SpringBoot集成JWT: (2.1)pom.xml文件:(2.2)业务编写:io.jsonwebtoken jjwt
import io.jsonwebtoken.*;
import org.springframework.util.StringUtils;
import java.util.Date;
public class JwtHelper {
//过期时间
private static long tokenExpiration = 24*60*60*1000;
//签名秘钥
private static String tokenSignKey = "123456";
//根据参数生成token
public static String createToken(Long userId, String userName) {
String token = Jwts.builder()
.setSubject("项目名或其它")
.setExpiration(new Date(System.currentTimeMillis() + tokenExpiration))
.claim("userId", userId)
.claim("userName", userName)
.signWith(SignatureAlgorithm.HS512, tokenSignKey)
.compressWith(CompressionCodecs.GZIP)
.compact();
return token;
}
//根据token字符串得到用户id
public static Long getUserId(String token) {
if(StringUtils.isEmpty(token)) return null;
Jws claimsJws =
Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);
Claims claims = claimsJws.getBody();
Integer userId = (Integer)claims.get("userId");
return userId.longValue();
}
//根据token字符串得到用户名称
public static String getUserName(String token) {
if(StringUtils.isEmpty(token)) return "";
Jws claimsJws =
Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);
Claims claims = claimsJws.getBody();
return (String)claims.get("userName");
}
public static void main(String[] args) {
String token = JwtHelper.createToken(1L, "lucy");
System.out.println(token);
System.out.println(JwtHelper.getUserId(token));
System.out.println(JwtHelper.getUserName(token));
}
}
(2.3)业务测试:
在需要生成token调用JWT工具类生成即可



