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的资料请关注毛票票其它相关文章!