Spring Boot 整合 JWT的方法
1、JWT是什么?
JWT是一个开放标准,它定义了一种用于简洁,自包含的用于通信双方之间以JSON对象的形式安全传递信息的方法。JWT可以使用HMAC算法或者是RSA的公钥密钥对进行签名。
简单来说,就是通过一定规范来生成token,然后可以通过解密算法逆向解密token,这样就可以获取用户信息。
优点:
1)生产的token可以包含基本信息,比如id、用户昵称、头像等信息,避免再次查库
2)存储在客户端,不占用服务端的内存资源
缺点:
token是经过base64编码,所以可以解码,因此token加密前的对象不应该包含敏感信息,如用户权限,密码等
2、JWT格式组成:头部、负载、签名
header+payload+signature
头部:主要是描述签名算法
负载:主要描述是加密对象的信息,如用户的id等,也可以加些规范里面的东西,如iss签发者,exp过期时间,sub面向的用户
签名:主要是把前面两部分进行加密,防止别人拿到token进行base解密后篡改token
3、关于jwt客户端存储
可以存储在Cookie,localStorage和sessionStorage里面
4、引入相关依赖并开发JWT工具类
1)引入依赖
io.jsonwebtoken jjwt 0.7.0
2)开发生产token方法
3)开发检验token方法
packagecom.haitaiinc.clinicpathservice.utils;
importcom.haitaiinc.clinicpathservice.entity.UserInfo;
importio.jsonwebtoken.Claims;
importio.jsonwebtoken.Jwts;
importio.jsonwebtoken.SignatureAlgorithm;
importorg.springframework.util.StringUtils;
importjava.util.Date;
publicclassJwtUtils{
publicstaticfinalStringSUBJECT="admin";
/**
*过期时间,毫秒,一周
*/
publicstaticfinallongEXPIRE=1000*60*60*24*7;
/**
*秘钥
*/
publicstaticfinalStringAPPSECRET="haitaiinc";
/**
*生成jwt
*
*@paramuserInfo
*@return
*/
publicstaticStringgeneJsonWebToken(UserInfouserInfo){
if(userInfo==null||StringUtils.isEmpty(userInfo.getUserId())||StringUtils.isEmpty(userInfo.getUserName())){
returnnull;
}
Stringtoken=Jwts.builder().setSubject(SUBJECT)
.claim("id",userInfo.getUserId())
.claim("name",userInfo.getUserName())
.setIssuedAt(newDate())
.setExpiration(newDate(System.currentTimeMillis()+EXPIRE))
.signWith(SignatureAlgorithm.HS256,APPSECRET).compact();
returntoken;
}
/**
*校验token
*
*@paramtoken
*@return
*/
publicstaticClaimscheckJWT(Stringtoken){
try{
finalClaimsclaims=Jwts.parser().setSigningKey(APPSECRET).
parseClaimsJws(token).getBody();
returnclaims;
}catch(Exceptione){
}
returnnull;
}
}
4)测试
packagecom.haitaiinc.clinicpathservice;
importcom.haitaiinc.clinicpathservice.entity.UserInfo;
importcom.haitaiinc.clinicpathservice.utils.JwtUtils;
importio.jsonwebtoken.Claims;
importorg.junit.jupiter.api.Test;
publicclassCommonTest{
@Test
publicvoidtestGeneJwt(){
UserInfouser=newUserInfo();
user.setUserId("admin");
user.setUserName("管理员");
Stringtoken=JwtUtils.geneJsonWebToken(user);
System.out.println(token);
}
@Test
publicvoidtestCheck(){
Stringtoken="eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImlkIjoiYWRtaW4iLCJuYW1lIjoi566h55CG5ZGYIiwiaWF0IjoxNTc3NTU3MDU1LCJleHAiOjE1NzgxNjE4NTV9.VrrKtCTnxVN76JhpyIusCGq9Wj89wLor0OqIJ6s0zXo";
Claimsclaims=JwtUtils.checkJWT(token);
if(claims!=null){
Stringid=(String)claims.get("id");
Stringname=(String)claims.get("name");
System.out.println(id);
System.out.println(name);
}else{
System.out.println("非法token");
}
}
}
以上就是SpringBoot整合JWT的方法的详细内容,更多关于SpringBoot整合JWT的资料请关注毛票票其它相关文章!