安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

JWTtoken封装以及自动刷新方案建议

10月22日 血海塔投稿
  什么是JWTJWT是一个开放标准,它定义了一种用于简洁,包含的用于通信双方之间以JSON对象的形式安全传递信息的方法。可以使用HMAC算法或者是RSA的公钥密钥对进行签名简单来说:就是通过一定规范来生成token,然后可以通过解密算法逆向解密token,这样就可以获取用户信息
  pom。xml!JWT相关dependencygroupIdio。jsonwebtokengroupIdjjwtartifactIdversion0。7。0versiondependency
  JWTUtil。javapackagecom。xmj。importcom。xmj。model。LoginUimportio。jsonwebtoken。Cimportio。jsonwebtoken。Jimportio。jsonwebtoken。SignatureAimportlombok。extern。slf4j。Slf4j;importjava。util。Dimportjava。util。HashMimportjava。util。MSlf4jpublicclassJWTUtil{token过期时间,正常是7天,方便测试我们设置70天privatestaticfinallongEXPIRE10006060710;加密的秘钥privatestaticfinalStringSECRETxmjcloud0417;令牌前缀privatestaticfinalStringTOKENPREFIXSUBJECTprivatestaticfinalStringSUBJECT根据用户信息生成tokenparamloginUserreturnpublicstaticMapgeneJsonWebToken(LoginUserloginUser){if(loginUsernull){thrownewNullPointerException(loginUser对象为空);}longdeadLineSystem。currentTimeMillis()EXPIRE;生成tokenStringtokenJwts。builder()。setSubject(SUBJECT)。claim(headImg,loginUser。getHeadImg())头像。claim(id,loginUser。getId())用户id。claim(email,loginUser。getMail())用户邮箱。claim(name,loginUser。getName())用户名称。setIssuedAt(newDate())生成日期。setExpiration(newDate(deadLine))过期时间为当前时间时间戳过期时间。signWith(SignatureAlgorithm。HS256,SECRET)。compact();签名算法和秘钥返回可以选择加前缀StringrealTokenTOKENPREFIXMapmapnewHashMap();map。put(accessToken,realToken);过期时间,refreshToken使用map。put(deadLine,deadLine);}校验token的方法paramtokenreturnpublicstaticClaimscheckJWT(Stringtoken){try{finalClaimsclaimsJwts。parser()。setSigningKey(SECRET)。parseClaimsJws(token。replace(TOKENPREFIX,))。getBody();}catch(Exceptione){log。info(解密失败);}}}
  用户登录操作用户登录1、根据mail去找记录2、有的话,则使用秘钥和用户传递的明文密码,进行加密,在和数据库中的进行匹配paramloginRequestreturnOverridepublicJsonDatalogin(UserLoginRequestloginRequest){ListUserDOuserDOListuserMapper。selectList(newQueryWrapperUserDO()。eq(mail,loginRequest。getMail()));if(userDOList!nulluserDOList。size()1){已经注册UserDOuserDOuserDOList。get(0);StringcryptPwdMd5Crypt。md5Crypt(loginRequest。getPwd()。getBytes(),userDO。getSecret());if(cryptPwd。equals(userDO。getPwd())){登陆成功,生成accessToken、accessToken过期时间以及refreshTokenLoginUseruserDTOnewLoginUser();BeanUtils。copyProperties(userDO,userDTO);MapmapJWTUtil。geneJsonWebToken(userDTO);生成refreshToken,页面静默获取token时候使用StringrefreshTokenCommonUtil。generateUUID();map。put(refreshToken,refreshToken);redisTemplate。opsForValue()。set(refreshToken,随意的value值,100060602430);returnJsonData。buildSuccess(map);}else{returnJsonData。buildResult(BizCodeEnum。ACCOUNTPWDERROR);}}else{未注册returnJsonData。buildResult(BizCodeEnum。ACCOUNTPWDERROR);}}
  在前后分离场景下,越来越多的项目使用jwttoken作为接口的安全机制,但存在jwt过期后,用户无法直接感知,假如在用户操作页面期间,突然提示登录,则体验很不友好,所以就有了token自动刷新需求;
  方案:前端控制检测token,无感知刷新
  用户登录成功的时候,一次性给他两个Token,分别为AccessToken和RefreshToken
  AccessToken有效期较短,比如1天或者5天,用于正常请求
  RefreshToken有效期可以设置长一些,例如10天、20天,作为刷新AccessToken的凭证
  刷新方案:当AccessToken即将过期的时候,例如提前30分钟,客户端利用RefreshToken请求指定的API获取新的AccessToken并更新本地存储中的AccessToken
  核心逻辑
  1、登录成功后,jwt生成AccessTUUID生成RefreshToken并存储在服务端redis中,设置过期时间
  2、接口返回3个字段AccessTokenRefreshToken访问令牌过期时间戳
  3、由于RefreshToken存储在服务端redis中,假如这个RefreshToken也过期,则提示重新登录;
  老王的疑问:RefreshToken有效期那么长,和直接将AccessToken的有效期延长有什么区别
  答:RefreshToken不像AccessToken那样在大多数请求中都被使用,主要是本地检测accessToken快过期的时候才使用,
  一般本地存储的时候,也不叫refreshToken,前端可以取个别名,混淆代码让攻击者不能直接识别这个就是刷新令牌
  缺点:前端每次请求需要判断token距离过期时间
  优点:后端压力小,代码逻辑改动不大
  刷新token方法未实现。刷新tokenparamparamreturnApiOperation(刷新accessToken)PostMapping(valuelogin)publicJsonDatalogin(ApiParam(用户登录对象)RequestBodyUserLoginRequestloginRequest){找redis中refreshtoken是否存在refreshtoken存在,解密accessToken重新调用JWTUtil。geneJsonWebToken()生成accessToken重新生成refreshToken,并存储redis,设置过期时间返回给前端returnjsonD}
投诉 评论 转载

为什么现在中国移动网速慢,流量还不够用,但是费用还比较高?5G还没来得及普及套路,坑人的都是套路,我原来是39元的最低消费,现在升到50元上还是不够用,感觉还没原来39元的耐用,感觉都是套路因为我们这边是垄断的。所有……1。5TMPV瑞风M32022款时尚与精致感兼具,突破众人期在智能技术的不断迭代下,汽车智能化、网联化的浪潮已不可阻挡,瑞风M32022款的出现,改变了用户对于10万以内的商用MPV车型的固有印象。结合年轻消费者的审美偏好,瑞风M320……小米MIX4体验后评价系统稳定性实体店有两台体验机,一台亮屏不超过1分钟直接黑屏关机,系统版本MIUI12。5。2;另一台能够正常使用,但是有小bug,息屏后会自动把亮度调到最低,就算息屏前把……美国政府宣布17个州和华盛顿特区进入紧急状态,为什么?屋漏偏逢连阴雨!美国疫情肆虐席卷全美不堪重负,这不又遭网络攻击,美国政府宣布17个州和华盛顿特区进入紧急状态,原因是当地最大燃油管道运营商遭到网络攻击,被迫关闭美国东部沿海各州……中兴不再低调,20G1TB新机陆续备货,5200mAh电池开对于中兴来说,现在最重要的就是在手机市场上打造爆款产品,因为我们看到,尽管如今的中兴同样有很多旗舰诞生,但在销量人气上完全不行,因此为了引起用户普遍注意,最好的方法就是要打造爆……JWTtoken封装以及自动刷新方案建议什么是JWTJWT是一个开放标准,它定义了一种用于简洁,包含的用于通信双方之间以JSON对象的形式安全传递信息的方法。可以使用HMAC算法或者是RSA的公钥密钥对进行签名简单来……中国卖家集体诉讼亚马逊空箱短缺已缓解跨境电商周报【亿邦动力讯】过去一周,跨境电商领域发生了这些事:平台动作1、中国卖家针对亚马逊打击好评返现提起集体诉讼日前,多个中国卖家向亚马逊提起集体诉讼,指控亚马逊以打……无代码搭建系统流程审批(二)企业更关注数据,数据的重要性毋容置疑,然而企业经常存在的场景是,业务流程线下跑,进程不可监控,经常导致数据落地滞后,过程数据也很难留存和分析,无法真正的优化提升流程效率。所以不……微信办理的ETC怎么样?首先微信小程序搜索ETC助手,点击进入ETC助手小程序进入ETC助手后,小程序会自动定位你所在的省份,点击新办新卡就可以开始线上办理了,广东、江苏、山东、北京四个省份已经……华为手机怎么投屏到电视机上?于使用华为手机的用户来说,多屏互动这个词可能并不陌生。因为如果你的手机支持此功能的话,当你下拉状态栏打开快捷功能开关界面,通常就能看到它(如果没有显示,可以尝试选择编辑快捷开关……小米汽车搞抄袭?惨遭打脸后慌忙删微博中关村在线消息:9月1日,雷军宣布小米汽车有限公司成立,注册资金为100亿人民币,雷军亲自出人法人代表。近日,小米社区官方发布了米粉墨菲对小米汽车的畅享,并配有小米电动汽车M1……2款超级电摩来了,最高时速102kmh,最大续航可达220公如今两轮电动车的发展逐渐出现了分化,中低端电摩主打的是经济实用,而高端电摩则更注重性能表现以及安全智能。在高端电摩领域,新日GF6和大阳的E5则算是其中的佼佼者。01、新……
国家互联网应急中心征集软硬件产品或服务受阿帕奇漏洞影响情况顺风车碳减排团标公布,合乘出行减排量评估有了技术规范快递价格拐点到来,服务品质将成为快递企业的核心竞争力芯片受困却破局而出,鸿蒙重启华为,任正非这次能赢吗?假期新闻汇总败家的过完了2021年,2022年有哪些数码产品值得买?年底3款公认几乎无差评手机,最低仅千元出头,12月换机首选小米CC9Pro获推MIUI12。5官宣苹果2021秋季发布会北京时间9。15号凌晨一点开启iPhone信号问题解决了?苹果5G基带设计完成,台积电试产华为Mate50概念出炉?简直就是翻版小米MIXAlpha字节跳动阿里等大厂的真实工作体验如何?看看四位程序员的自述

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利