1.简介:
(1.1)JWT(Json Web Token):
为网络应用环境间传递声明而执行一种基于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文件:
<!--引入JWT依赖--> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> </dependency>
(2.2)业务编写:
import io.jsonwebtoken.*; import org.springframework.util.StringUtils; import java.util.Date; /** * JWT生成token工具类 */ 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<Claims> 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<Claims> 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工具类生成即可