做商城网站带宽推广通

张小明 2026/1/9 15:13:57
做商城网站带宽,推广通,手游传奇发布网站999,wordpress雄欲目录一、令牌技术概览二、JWT的核心组成与结构1、Header#xff08;头#xff09;2、Payload#xff08;载荷#xff09;3、Signature#xff08;签名#xff09;4、Base64编码5、JWT的认证流程三、使用JWT令牌1、引入JWT令牌的依赖2、引入JWT令牌的工具类3、生成JWT令牌…目录一、令牌技术概览二、JWT的核心组成与结构1、Header头2、Payload载荷3、Signature签名4、Base64编码5、JWT的认证流程三、使用JWT令牌1、引入JWT令牌的依赖2、引入JWT令牌的工具类3、生成JWT令牌4、统一拦截器配置四、总结一、令牌技术概览在登录认证中令牌是用户的身份标识是合法的身份凭证好像十分神秘和高大上但其本质是一个字符串。如果使用令牌技术进行会话跟踪在浏览器发起请求请求登录接口如果登录成功那么就在服务端生成一个令牌令牌就是用户的合法身份凭证在响应数据的时候就可以将令牌直接响应给前端。在前端程序接收到令牌之后就需要将令牌存储起来可以存储在Cookie中也可以存储在localStorage这样的其他存储空间。之后在后续的每一次请求中都需要携带令牌服务端的统一拦截器需要校验令牌的有效性。如果令牌有效则说明用户已经执行了登录操作拦截器就可以放行如果令牌无效解析令牌报错那么则说明用户没有执行登录操作拦截器就需要拦截并返回错误代码让用户登录。整个流程如下图所示此时在同一个会话的多次请求之间我们就通过将数据存储在令牌中的方式完成了数据共享。令牌技术有很多优点比如支持多端不但支持PC端而且支持移动端令牌技术也可以解决服务器集群的认证问题因为只需要成功解析令牌就可以证明令牌是有效的是无需在服务器存储的存储在Redis令牌的安全性也非常强悍。但也是因为其强悍的性能令牌使用起来会更加的复杂但是这些劣势在优势面前就不值一提了。二、JWT的核心组成与结构令牌的形式有很多本文讲解功能强大、使用最广泛的JWT令牌。JWT令牌JSON Web Token定义了一种简洁的、自包含的格式可用于通信双方以Json数据格式安全的传输信息。简洁JWT令牌的本质就是字符串可以作为请求参数或者在请求头中直接传递。可以存储在Cookie和Header里面建议存储在Header里面。自包含JWT可以自己定义需要存储的信息安全JWT令牌虽然是一个字符串但是可以根据需求在令牌中存储自定义的数据内容比如在登录操作中可以在JWT令牌中存储用户相关信息。JWT由三部分Base64编码的字符串组成以点号.分隔Header.Payload.Signature。eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwiaWF0IjoxNjg5NjYxODUwLCJleHAiOjE2OTA5NTc4NTB9.Bq0pExJcSgaQD94qAYVSx4W__K8FWGeY7iUJKMyTIYFofZoqa2VfEvl8Na96kt2wYbjFImHmQntkdce6cHQ8_A1、Header头该部分主要是记录令牌类型、令牌使用的签名算法等。例如{typ:JWT,alg:HS512}从这个Header信息就可以看出这是一个JWT令牌使用了HS512签名算法。‌alg‌指定加密算法如HS256、RS256确保令牌完整性。‌typ‌固定为JWT标识令牌类型。2、Payload载荷该部分主要是携带一些自定义的信息或者一些默认的信息等例如{sub:1,iat:1689661850,exp:1690957850}从这个Payload信息可以看出这个令牌携带的数据是一个用户数据sub为1iat为1689661850。载荷存储用户声明Claims分为三类‌注册声明Registered Claims‌预定义字段如sub表示主题exp表示过期时间。‌公共声明Public Claims‌自定义字段如role: “admin”。‌私有声明Private Claims‌业务特定数据如用户ID。3、Signature签名这个部分主要是令牌的签名签名可以防止Token被篡改可以提高令牌的安全性。其构成是将Header和Payload两个部分加入指定密钥Secret并通过指定的签名算法计算而来。正是因为数字签名所以说JWT令牌是非常安全的一旦令牌中的任何一个部分、任何一个字符被篡改了整个令牌在校验时都会失效。4、Base64编码JWT令牌是如何将原始的Json数据转变为字符串的呢在生成JWT令牌的时候对原始数据进行了Base64编码这并非是一种加密方式只是一种编码方式。Base64编码是一种基于64个可打印的字符来表示二进制数据的编码方式。所使用的64个字符分别是A到Z、a到z、0-9一个加号()一个斜杠(/)加起来就是64个字符。任何数据经过base64编码之后最终就会通过这64个字符来表示。在有些情况下Basae64编码可能会出现一个等号。等号是一个补位的符号。5、JWT的认证流程1.用户登录‌客户端提交凭证如用户名/密码至认证服务器。‌2.令牌签发‌服务器验证凭证后生成JWT并返回客户端。3‌.令牌存储‌客户端将JWT保存于localStorage或Cookie中(更建议存在headers里面)。4‌.请求携带‌客户端在后续请求头中添加Token。‌5.服务端验证‌服务器解密签名、检查过期时间exp和发行者iss验证通过后执行业务逻辑。三、使用JWT令牌1、引入JWT令牌的依赖想要使用JWT令牌首先需要引入JWT对应的Maven坐标dependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt/artifactIdversion0.9.1/version/dependency2、引入JWT令牌的工具类在引入了JWT依赖之后就可以使用对应的工具类JwtUtil提供的API来完成JWT令牌的生成与校验packagecom.sky.utils;importio.jsonwebtoken.Claims;importio.jsonwebtoken.JwtBuilder;importio.jsonwebtoken.Jwts;importio.jsonwebtoken.SignatureAlgorithm;importjava.nio.charset.StandardCharsets;importjava.util.Date;importjava.util.Map;publicclassJwtUtil{/** * 生成jwt * 使用Hs256算法, 私匙使用固定秘钥 * * param secretKey jwt秘钥 * param ttlMillis jwt过期时间(毫秒) * param claims 设置的信息 * return */publicstaticStringcreateJWT(StringsecretKey,longttlMillis,MapString,Objectclaims){// 指定签名的时候使用的签名算法也就是header那部分SignatureAlgorithmsignatureAlgorithmSignatureAlgorithm.HS256;// 生成JWT的时间longexpMillisSystem.currentTimeMillis()ttlMillis;DateexpnewDate(expMillis);// 设置jwt的bodyJwtBuilderbuilderJwts.builder()// 如果有私有声明一定要先设置这个自己创建的私有的声明这个是给builder的claim赋值一旦写在标准的声明赋值之后就是覆盖了那些标准的声明的.setClaims(claims)// 设置签名使用的签名算法和签名使用的秘钥.signWith(signatureAlgorithm,secretKey.getBytes(StandardCharsets.UTF_8))// 设置过期时间.setExpiration(exp);returnbuilder.compact();}/** * Token解密 * * param secretKey jwt秘钥 此秘钥一定要保留好在服务端, 不能暴露出去, 否则sign就可以被伪造, 如果对接多个客户端建议改造成多个 * param token 加密后的token * return */publicstaticClaimsparseJWT(StringsecretKey,Stringtoken){// 得到DefaultJwtParserClaimsclaimsJwts.parser()// 设置签名的秘钥.setSigningKey(secretKey.getBytes(StandardCharsets.UTF_8))// 设置需要解析的jwt.parseClaimsJws(token).getBody();returnclaims;}}3、生成JWT令牌MapString,ObjectclaimsnewHashMap();claims.put(JwtClaimsConstant.EMP_ID,employee.getId());StringtokenJwtUtil.createJWT(jwtProperties.getAdminSecretKey(),jwtProperties.getAdminTtl(),claims);4、统一拦截器配置packagecom.sky.interceptor;importcom.sky.constant.JwtClaimsConstant;importcom.sky.context.BaseContext;importcom.sky.properties.JwtProperties;importcom.sky.utils.JwtUtil;importio.jsonwebtoken.Claims;importlombok.extern.slf4j.Slf4j;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Component;importorg.springframework.web.method.HandlerMethod;importorg.springframework.web.servlet.HandlerInterceptor;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;/** * jwt令牌校验的拦截器 */ComponentSlf4jpublicclassJwtTokenAdminInterceptorimplementsHandlerInterceptor{AutowiredprivateJwtPropertiesjwtProperties;/** * 校验jwt * * param request * param response * param handler * return * throws Exception */publicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{//判断当前拦截到的是Controller的方法还是其他资源if(!(handlerinstanceofHandlerMethod)){//当前拦截到的不是动态方法直接放行returntrue;}//1、从请求头中获取令牌Stringtokenrequest.getHeader(jwtProperties.getAdminTokenName());//2、校验令牌try{log.info(jwt校验:{},token);ClaimsclaimsJwtUtil.parseJWT(jwtProperties.getAdminSecretKey(),token);LongempIdLong.valueOf(claims.get(JwtClaimsConstant.EMP_ID).toString());log.info(当前员工id,empId);BaseContext.setCurrentId(empId);//3、通过放行returntrue;}catch(Exceptionex){//4、不通过响应401状态码response.setStatus(401);returnfalse;}}}四、总结JWT令牌是现在越来越流行使用越来越广泛的会话跟踪技术可以在多端使用并且有极强的安全性能还可以应对服务器集群问题是解决登录认证问题的最佳选择。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站必须要实名认证么经典小型建筑设计案例

FastAPI语音识别终极指南:快速构建高性能音频转录API 【免费下载链接】awesome-fastapi A curated list of awesome things related to FastAPI 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-fastapi 想要快速构建高性能的语音识别API吗&#xff1f…

张小明 2026/1/9 14:04:19 网站建设

网页模板下载网站建设工程网站教程

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个一键式测试环境生成工具,能够快速部署包含HTTPS和HTTP端点的测试网站,自动配置不同的referrer策略(包括no-referrer-when-downgrade),并…

张小明 2026/1/9 14:33:33 网站建设

电商网站建设定制性价比高seo排名

高效Zotero插件:智能PDF下载完整指南 【免费下载链接】zotero-scihub A plugin that will automatically download PDFs of zotero items from sci-hub 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-scihub 还在为手动下载学术文献PDF而烦恼吗&#…

张小明 2026/1/9 15:01:07 网站建设

网站续费如何做分录天津综合网站建设商店

Rust工具链管理终极指南:从零搭建高效开发环境 【免费下载链接】rustup The Rust toolchain installer 项目地址: https://gitcode.com/gh_mirrors/ru/rustup 想要在不同Rust版本间无缝切换?需要为多个项目配置独立编译环境?Rust工具链…

张小明 2026/1/7 22:31:27 网站建设

定制型网站建设服务如何用wordpress做产品介绍

截至2025年底,专精特新“小巨人”企业已突破1.76万家,全国专精特新企业总量超过12万家,三年增长近40%,成为我国制造业补链、强链、锻链的核心力量。以下从行业分布、创新能力、区域格局、政策红利和未来趋势五个维度,为…

张小明 2026/1/7 22:31:27 网站建设

站长之家seo查询官方网站自己做社交网站吗

还在为GitHub的龟速下载而烦恼吗?当你满怀期待地想clone一个开源项目,却发现下载进度像蜗牛一样缓慢时,那种心情真是让人崩溃。今天我要为你介绍一款能够彻底改变GitHub访问体验的神器——Fast-GitHub插件,让你的开发效率实现质的…

张小明 2026/1/7 22:31:26 网站建设