SpringBoot之JWT令牌校验
本文根据黑马b站springboot3+vue3课程
JWT
(JSON Web Token)是一种开放标准(RFC 7519),用于在不同实体之间安全地传输信息。它由三个部分组成:头部(Header)、载荷(Payload)和签名(Signature)。
- 头部(Header):头部通常由两部分组成,标识token的类型和所使用的签名算法,例如:
{
"alg": "HS256",
"typ": "JWT"
}
这表示该JWT使用HS256算法进行签名,并且是一个JWT类型的token。
-
载荷(Payload):载荷是JWT的第二部分,也称为Claim。它包含了要传输的数据,可以是用户的身份信息、权限信息等。载荷分为三个部分:
- 注册声明(Registered Claims):这些是预定义的声明,包含了一些标准的信息,如iss(签发者)、sub(主题)、aud(接收者)、exp(过期时间)、nbf(生效时间)、iat(签发时间)等。
- 公共声明(Public Claims):这些是自定义的声明,用于传递一些非强制性的信息,例如用户的角色、权限等。
- 私有声明(Private Claims):这些也是自定义的声明,用于在JWT的发送和接收方之间共享信息,但它们不是JWT规范的一部分,只是双方之间协商的私有信息。
-
签名(Signature):签名是JWT的第三部分,用于验证消息的完整性和来源。它由使用私钥对头部和载荷进行签名的结果组成,以确保数据在传输过程中没有被篡改。
JWT通常用于身份验证和信息交换。例如,在 Web 应用程序中,当用户成功登录后,服务器会生成一个JWT并将其发送回客户端,客户端将JWT存储起来,并在后续的请求中将其发送给服务器进行身份验证。服务器收到JWT后,会验证其签名和有效期,并根据载荷中的信息来决定是否授权用户访问特定的资源。
如果输入正确的账号密码在本机访问如下
public class JwtTest {
@Test
public void testGen() {
Map<String, Object> claims = new HashMap<>();
claims.put("id", 1