• 其实本质一张数字身份证,在登陆的时候客户端从login发送请求,由过滤器先忽略,随后到有工具类生成令牌,返回给客户端,然后客户端每次的请求都会带着这个token,由过滤器来过滤,保证每一次操作都只能由登录的客户使用
  • 主要分为三段, Header(加密算法):就是有alg(加密算法),typ(固定的JWT)
    Payload(用户信息):(exp,过期的时间戳)(userld,自定义)
    Signature(签名):把header+拼接好的载荷用算法来求出签名
public static String createJWT(String secretKey, long ttlMillis, Map<String, Object> claims) {  
    // 指定签名的时候使用的签名算法,也就是header那部分  
    SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;  
  
    // 生成JWT的时间,转成Date对象,ttlMillis就是有效时间
    long expMillis = System.currentTimeMillis() + ttlMillis;  
    Date exp = new Date(expMillis);  
  
    // 开始拼接最后的token
    JwtBuilder builder = Jwts.builder()  
            //这里与下面的signWith结合后就是payload,只不过这个特殊,他主动装载了载荷,所以要先定义,正常的payload后面就是userld,但这个直接将几个属性一并封装到了map这个集合后再这个传入,可计算的属性就多了
            .setClaims(claims)  
            // 这个里面写的都是计算的规则,payload与header会自动拼接成字符串后传这个里面计算,最后的结果就是签名
            .signWith(signatureAlgorithm, secretKey.getBytes(StandardCharsets.UTF_8))  
            // 设置过期时间  
            .setExpiration(exp);  
            //这是最后拼接返回的token
    return builder.compact();  
}

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐