java-jwt,jwt如何实现
目录
一、简介1 .标题2 .有效载荷3 .签名4。组合二、封装类1.引入依赖2.封装方法三、使用方法
一、简介
JWT是代币的一种,一个JWT字符串包含三个部分
1.Header
头部信息,一般不需要声明,默认为HS256签名算法和JWT令牌类型
{ alg: HS256 ,//指定签名算法典型: JWT //指定代币令牌类型}
2.Payload
包含一些默认字段,还可以自定义一些私有字段,但是不要放敏感信息
iss:发行人exp:到期时间sub:主题:澳元用户nbf:在此之前不可用iat:发布时间jti: JWT ID用于标识该JWT
3.Signature
数据签名,对上面两部分进行数据签名,标题部分和有效载荷部分先进行base64Url编码,然后用英文句号拼接并加上一个自定义的秘密字符串盐值进行HS256对称加密【也可以用其它算法或非对称加密】
iss:发行人exp:到期时间sub:主题:澳元用户nbf:在此之前不可用iat:发布时间jti: JWT ID用于标识该JWT
4.组合
最后将报头、有效载荷、签名三部分用英文句号拼接就生成了完整的JWT
标题。有效载荷.签名
二、封装类
1.引入依赖
!-jwt-dependency groupId com。auth 0/groupId artifact id Java-jwt/artifact id版本3 . 10 . 3/版本/依赖性
2.封装方法
包com。CX明星报。utils导入com。验证0。jwt。jwt导入com。验证0。jwt。jwt创作者;导入com。验证0。jwt。算法。算法;导入com。验证0。jwt。接口。解码djwt导入com。验证0。jwt。接口。jwt验证器;导入Java。util。日历;导入Java。util。地图;公共类JwtUtil { //签名密钥private static final String SECRET= hello JWT * % $ # $ ;/** * 生成token * @param负载令牌携带的信息* @返回令牌字符串*/public静态字符串生成标记(MapString,String有效负载){ //指定代币过期时间日历日历=日历。getinstance();calendar.add(日历。小时,24);//24小时JWTCreator .builder builder=jwt。create();//构建有效载荷。foreach(带索赔的建设者:3360);//指定过期时间和签名算法,并返回token字符串token=builder。withexpiresat(日历。gettime()).符号(算法HMAC256(保密));返回令牌;} /** * 解析令牌* @param令牌令牌字符串* @返回解析后的代币类*/公共静态解码jwt decodeken(字符串令牌){ jwt验证器jwt验证器=jwt。要求(算法HMAC256(保密))。build();解码的jwt解码的jwt=jwt验证器。验证(令牌);返回decodedJWT}}
三、使用方法
包com。CX明星;导入com。验证0。jwt。例外情况。jwtdecodeexception导入com。验证0。jwt。例外情况。tokenexpire异常;导入com。验证0。jwt。接口。解码djwt导入com。CX明星报。utils。jwtutil导入org。朱尼特。木星。API。测试;导入org。spring框架。靴子。测试。语境。弹簧靴测试;导入Java。util。hashmap导入Java。util。地图;@ spring boot测试类JwtLoginApplicationTests { @ Test void token Test(){//根据用户信息生成令牌- MapString,String payload=new HashMap();payload.put(userId , 233 );payload.put(用户名,‘PS’);string token=jwtutil。生成令牌(有效载荷);系统。出去。println(令牌: 令牌);//- //解析令牌并获取用户信息-尝试{ DecodedJWT DecodedJWT=jwtutil。decodetoken(令牌);字符串userId=解码的jwt。获取声明(“userId”).asString();string userName=decodedjwt。获取声明(“用户名”).asString();string exp=解码的jwt。getexpiresat().toString();系统。出去。println( userId : userId);//取出自定义属性【用户系统。出去。println(用户名: 用户名);//取出自定义属性【用户名】系统。出去。println( exp : exp);//取出默认属性【过期时间】} catch(JWTDecodeException e){ system。出去。println(令牌错误);} catch(tokenexpire异常e){ system。出去。println(令牌过期);} //- }}
ps:最后附一篇写的很详细的JWT文章https:///文章/250529.htm
到此这篇关于爪哇岛使用JWT的文章就介绍到这了,更多相关爪哇岛使用JWT内容请搜索盛行信息技术以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行它!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。