首页 > 编程知识 正文

springboot+jwt,jwt如何实现

时间:2023-05-05 09:46:30 阅读:179674 作者:4973

使用SpringBoot集成JJwt前言一、pom.xml二、JwtUtils三、验证

自: https://www.Jian Shu.com/p/aad 403 DDD1e 2

前言jwt(JSONwebtoken )是实现token技术的解决方案,用于前端和服务端进行身份验证。 本文只是基于私钥的快速创建和解析方法,对于在后端使用过滤检查逻辑可以有自己的补充

一. pom.xml! - https://mvn repository.com/artifact/io.jsonwebtoken/jjwt---dependencygroupidio.jsonwebtoken/groupidartifaction import io.jsonwebtoken.Claims; import io.jsonwebtoken.jwt builder; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.signature algorithm; import javax.crypto.SecretKey; import javax.crypto.spec.secret key spec; import java.util.Base64; import java.util.Date; import java.util.HashMap; import java.util.Map;/* * @ author : lzy * @ createtime :2021/6/18 * @ description : * */publicclassjwtutils {/* * * token到期单位为: 此值为30天*/privatestaticfinallongtoken _ expired _ time=30 * 24 * 60 * 60; publicstaticfinalstringjwtid=' token id '; /** * jwt加密解密密钥(可自行填写(*/privatestaticfinalstringjwt _ secret=' 1234567890 ' );/* * jwt */publicstaticstringcreatejwt (mapstring,Object claims,long time ) (创建signaturealgorithmsignaturealgorithm=) date now=new date (system.current time millis () ); SecretKey secretKey=generalKey (; longnowmillis=system.current time millis (; //生成jwt的时间//这里是在payload中添加各种标准声明和私有声明,JwtBuilder=jwts.builder ()//这里实际上是new的jwt builder,jwt的这是给builder的claim赋值。 为标准声明赋值后, setid(JWTid ) /设置jti (jw tid ) :是jwt的唯一标识符,根据业务需要可以设置为不重复的值。 主要作为一次性使用. setissuedat(now )//iat: jwt的发行时间. signwith ) signaturealgorithm,secretKey ); //用于签名的签名算法和用于签名的私钥if(time=0) { long expMillis=nowMillis time; dateexp=newdate(expmillis; bilder.setexpiration(exp ); //设置过期日期(} return builder.compact ); //验证jwt//publicstaticclaimsverifyjwt (string token )//签名私钥与生成的签名的私钥一模一样(secret key=generalkey ); Claims claims; try { claims=jwts.parser (/defaultjwtparser.setsigningkey )//用于设置签名的私钥. parseclaimsjws ) ) getbody } cacarser //设置需要分析的jwt返回客户端; } /** *从字符串中提取加密key * * @ return */publicstaticsecretkeygeneralkey () { String stringKey=JWT_SECRET; byte [ ] encoded key=base64.get encoder (.encode ) jwt_secret.getbytes ); secret keykey=newsecretkeyspec (encoded key,0,encodedKey.length,' AES ' ); 返回密钥; }/* * *从userid和openid到token */publicstaticstringgeneratetoken (string open id,Integer userId ) { MapString,objectmap=map.put('openId ',openid ); map.put('sub ',openId ); returncreatejwt(map,TOKEN_EXPIRED_TIME ); }三、验证测试类的创建

importau.com.koala class.session.util.jwt utils; import io.jsonwebtoken.Claims; import org.junit.Test; importorg.spring framework.boot.test.context.springboottest; import java.util.Base64;/* * @ author : lzy * @ createtime :2021/6/18 * @ description : * */@ springbootestpublicclasstest { @ test Plast 验证//claims claims=jwt utils.verify jwt (s ); system.out.println(claims: ) claims ); string subject=claims.get subject (; string userid=claims.get (' userid ' ).toString ); string OpenID=claims.get (' OpenID ' ).toString ); stringsub=claims.get('sub ' ).toString ); system.out.println (subject : ) subject; system.out.println(userid: ) userid; system.out.println(openid: ) openid ); system.out.println(sub: ) sub; }运行结果

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。