EKP jd135 JWT 生成token

 

使用Java JWT库(通常是jjwt)生成JWT(JSON Web Token)的示例。JWT是一种用于在网络应用之间传递声明的安全方式。这段代码使用了HS256算法进行签名。

下面是代码的解释:

1. `Jwts.builder()`: 创建一个JWT生成器对象。

2. `setHeaderParam("alg", "HS256")`: 设置JWT的头部参数alg为HS256,表示使用HS256算法进行签名。

3. `setHeaderParam("typ", "JWT")`: 设置JWT的头部参数typ为JWT,表示JWT的类型。

4. `setIssuedAt(new Date())`: 设置JWT的签发时间为当前时间。

5. `setIssuer(appKey)`: 设置JWT的签发者为appKey,appKey应该是你的应用程序的标识符。

6. `setExpiration(expireDate)`: 设置JWT的过期时间为expireDate,expireDate应该是一个Date对象,表示JWT的有效期。

7. `signWith(SignatureAlgorithm.HS256, secretKey)`: 使用HS256算法和secretKey进行签名。

8. `compact()`: 生成最终的JWT字符串。

请注意,这段代码中的appKey和secretKey应该是你自己的应用程序的密钥,你需要将它们替换为实际的值。

另外,这段代码只是生成JWT的一部分,并没有包含任何声明(claims)。在实际使用中,你可能需要根据你的需求添加一些声明,例如用户ID、角色等信息。

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package com.landray.kmss.cmex.ssooauth.util;
 
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.ExpiredJwtException;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.apache.commons.lang.StringUtils;
 
import java.util.Calendar;
import java.util.Date;
 
public class TokenUtil {
 
    //过期时间:秒
    public static final int EXPIRE = 10;
 
    public static String getToken(String appKey, String secretKey) {
        if (StringUtils.isEmpty(secretKey)) {
            return null;
        }
        Calendar nowTime = Calendar.getInstance();
        nowTime.add(Calendar.SECOND, EXPIRE);
        //过期时间
        Date expireDate = nowTime.getTime();
        return Jwts.builder()
                .setHeaderParam("alg", "HS256")
                .setHeaderParam("typ", "JWT")
                .setIssuedAt(new Date())
                .setIssuer(appKey)
                .setExpiration(expireDate)
                .signWith(SignatureAlgorithm.HS256, secretKey)
                .compact();
    }
 
 
    /**
     * 解析 jwt
     */
    public static boolean verifyToken(String token, String secretKey) {
        boolean validation = false;
        Claims claims;
        try {
            claims = Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token).getBody();
            System.out.println("claims--->" + claims);
            validation = true;
        } catch (ExpiredJwtException e) {
            //此异常为生成的token过期异常
            System.out.println("token 已过期" + e.getClaims());
            e.printStackTrace();
        } catch (Exception e) {
            System.out.println(" Some other exception in JWT parsing !");
            e.printStackTrace();
        }
 
        return validation;
    }
 
    public static void main(String[] args) {
        String token = getToken("biBoard", "secret");
        System.out.println(token);
        String token1 = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE2ODM2MTk4OTcsImlzcyI6ImJpQm9hcmQiLCJleHAiOjE2ODM2MTk5MDZ9.ZHw3LDlPtxtNXS5cM0LHyjyXqspde1BzDwNaVvT_s1k";
        boolean validation = verifyToken(token1, "secret");
        System.out.println(validation);
    }
 
}

  

 

posted @   CrushGirl  阅读(68)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示