您的位置:首页 > 健康 > 养生 > 电子商务是干嘛的 主要学什么_池州网站建设公司_新闻稿发布_外链火

电子商务是干嘛的 主要学什么_池州网站建设公司_新闻稿发布_外链火

2024/12/23 11:42:32 来源:https://blog.csdn.net/xiugtt6141121/article/details/143059927  浏览:    关键词:电子商务是干嘛的 主要学什么_池州网站建设公司_新闻稿发布_外链火
电子商务是干嘛的 主要学什么_池州网站建设公司_新闻稿发布_外链火

1.Jwt介绍

1.1 JWT简介

​ JSON Web Token(JWT)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。该token被设计为紧凑且安全的,特别适用于前后端无状态认证的场景。

1.2.Jwt组成

  • 头部(Header)(非敏感)
    • 头部用于描述关于该JWT的最基本的信息,例如数据类型以及签名所用的算法等,本质是一个JSON格式对象;
    • 举例说明
      • {“typ”:“JWT”,“alg”:“HS256”} 解释:在头部指明了签名算法是HS256算法,整个JSON对象被BASE64编码形成JWT头部字符串信息;
      • BASE64编码详见:https://tool.oschina.net/encrypt,编码后的字符串:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
      • 值得注意的是BASE64不是加密算法,可进行正向编码和反向解码处理;
  • 载荷(playload)(非敏感数据)
    • 载荷就是存放有效信息的地方,该部分的信息是可以自定义的;
    • 载荷payload格式:{“sub”:“1234567890”,“name”:“John Doe”,“admin”:true}
    • 载荷相关的JSON对象经过BASE64编码形成JWT第二部分:eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG7CoERvZSIsImFkbWluIjp0cnVlfQ==
  • 签证(signature)
    • jwt的第三部分是一个签证信息,这个签证信息由三部分组成:签名算法( header (base64后的).payload (base64后的) . secret )
    • 这个部分需要base64加密后的header和base64加密后的payload使用.连接组成的字符串,然后通过header中声明的加密方式进行加盐secret秘钥组合加密,然后就构成了jwt的第三部分:TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

最后将这三部分用●连接成一个完整的字符串,构成了最终的jwt:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG7CoERvZSIsImFkbWluIjp0cnVlfQ==.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

2、JWT使用

2.1 工程引入JWT依赖

<dependencies><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency>
</dependencies>

2.2 生成JWT令牌

@Test
public void testGenerate(){String compact = Jwts.builder().setId(UUID.randomUUID().toString())//设置唯一标识.setSubject("JRZS") //设置主题.claim("name", "nineclock") //自定义信息.claim("age", 88) //自定义信息.setExpiration(new Date()) //设置过期时间.setIssuedAt(new Date()) //令牌签发时间.signWith(SignatureAlgorithm.HS256, "itheima")//签名算法, 秘钥.compact();System.out.println(compact);
}

2.3 JWT令牌校验

@Test
public void testVerify(){String jwt = "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI5MzljNjU4MC0yMTQyLTRlOWEtYjcxOC0yNzlmNzRhODVmNDMiLCJzdWIiOiJOSU5FQ0xPQ0siLCJuYW1lIjoibmluZWNsb2NrIiwiYWdlIjo4OCwiaWF0IjoxNjE3MDMxMjUxfQ.J-4kjEgyn-Gkh0ZuivUCevrzDXt0K9bAyF76rn1BfUs";Claims claims = Jwts.parser().setSigningKey("itheima").parseClaimsJws(jwt).getBody();System.out.println(claims);
}

当我们对令牌进行任何部分(header , payload , signature)任何部分进行篡改, 都会造成令牌解析失败 ;

3、 JWT在前端保存方案

后端基于JWT生成的Token信息在前端有如下保存方式:

  • LocalStorage
  • SessionStorage
  • cookie
  • 页面中
  • 其它

以LocalStorage为例:

<script>//保存信息localStorage.setItem("name", "ithiema");//获取信息alert(localStorage.getItem("name"))//删除信息localStorage.removeItem("name");
</script>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com