Assistant Assistant
首页
  • 快速入门
  • 核心功能
  • 使用配置
生态
问答
💖支持
🚀起飞诶~~起飞
更新日志 (opens new window)
GitHub (opens new window)
首页
  • 快速入门
  • 核心功能
  • 使用配置
生态
问答
💖支持
🚀起飞诶~~起飞
更新日志 (opens new window)
GitHub (opens new window)
  • 快速入门

    • 简介
    • 快速开始
    • 安装
    • 配置
    • 注解
    • 快速测试
  • 核心功能

    • 热身模块

      • 代码生成器
    • 工具类

      • Token工具类
        • 配置
        • 使用
          • 初始化
          • 创建Token
          • 解析Token
          • 刷新Token
      • 正则工具类
      • 加密算法工具类
    • 业务类

      • 超级业务链
      • ID生成器
      • 统一异常处理中心
目录

Token工具类

[👉 源码](https://github.com/geniusay/Assistant)

<dependency>
    <groupId>io.github.geniusay</groupId>
    <artifactId>assistant-boot-start</artifactId>
    <version>1.1.1</version>
</dependency>

1
2
3
4
5
6
7
8

# TokenUtil

简述

一款token自动生成,解析工具,目前包含Token的基本功能以及refresh-token功能 关于什么是Token (opens new window)

# 配置

TokenUtil 内部的配置由JWTTokenProperties决定

属性名 类型 默认值 描述
accessTokenName String accessToken token名字
accessTokenExpireTime String 30 访问token过期时间
accessTokenTimeUnit String MINUTES token过期时间单位(请全部大写,采用TimeUnit的时间单位格式)
enableRefresh Boolean false 是否开启刷新token
refreshTokenName String refreshToken token名字
refreshTokenExpireTime String 24 刷新token过期时间
refreshTokenTimeUnit String HOURS refresh-token过期时间单位(请全部大写,采用TimeUnit的时间单位格式)
tokenSecret String cuAihCz53DZRjZwbsGcZJ2Ai6At+T142uphtJMsk7iQ= token密钥
isRandomJIT Boolean false 是否随机生成jti

以上这些配置均可再yml文件中配置,格式如下⬇

assistant:
  token:
    access-token-expire-time: 3600
    access-token-time-unit: SECONDS
    enable-refresh: true
1
2
3
4
5

# 使用

# 初始化

@Autowired
TokenUtil tokenUtils;

class User{
    private String name;
    private int age;
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
User user = new User("Genius",18);
}
1
2
3
4
5
6
7
8
9
10
11
12

# 创建Token

创建Token有许多方式,这里一一来介绍一下,在使用TokenUtils时,会根据你的参数返回一个Token类,Token类中包含了Access-Token等等信息,接下来 我们帮上述的User对写封装到Token中

1,单个payload Token创建

//Token<T> createToken(String payloadName,T payload,String subject) payload名称,payload,公共部分
String token = tokenUtils.createToken("user",user,"123456").getAccessToken();
1
2

2,多个payload Token创建

//Token<T> createToken(Map<String,Object> payload,String subject)
String token2 = tokenUtils.createToken(Map.of("user",user,"ID","123456"),"123456").getAccessToken();
1
2

3,详细Token创建

/*
 * 创建token
 * @param header 头部
 * @param claims 私有部分,不建议存放私密信息
 * @param iat jwt签发时间
 * @param exp jwt过期时间
 * @param nbf jwt生效时间
 * @param iss jwt签名者
 * @param sub 公共部分
 * @param jti jwt唯一身份标识,jti
 * @param audience 发布人
 * @param isRefresh 是否刷新token
 */
Claims claims = Jwts.claims();
        claims.put("user",user);
String token3 = tokenUtils.createToken(
        Map.of("type","jwt","alg","HS256"), //token头信息
        claims,                                             //token payload
        new Date(),                                         //token签发时间
        new Date(new Date().getTime() + 60*1000),           //token过期时间
        new Date(new Date().getTime() + 120*1000),          //token刷新时间,如果未启用则无效
        new Date(new Date().getTime()),           //Token生效时间
        "Genius",                                           //token签名者
        "public Path",                                      //公共区域
        tokenUtils.getJwtTokenProperties().getJit(),        //token唯一身份标识
        "Genius",                                           //发布人
        true                                               //是否需要进行刷新操作
        ).getAccessToken();
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

# 解析Token

注意

解析Token函数目前不具备自动刷新access-token的功能,如果你想实现refresh功能,请搭配refreshToken使用

解析Token有多种方法以及返回类型

方法名 返回类型 参数 方法描述
parseToken Claims String(token字符串) 直接返回Claims主体(不推荐直接使用)
parseTokenToObj 泛型T String(token字符串),String(需要获取的payload名称),Class(转换的类型) 解析Token返回payload中的对象
parseTokenToToken Token String(token字符串),String(需要获取的payload名称),Class(转换的类型) 解析access-token并返回Token对象
Token<User> token1 = tokenUtils.parseTokenToToken(token, "user", User.class);
User user = tokenUtils.parseTokenToObj(token, "user", User.class);
1
2

# 刷新Token

简述

关于refresh-token的使用,access-token作为一个短期token,refresh-token作为一个长期token,如果refresh-token还没过期,
但是access-token 已经过期,那么就会返回一个新的access-token,如果refresh-token也过期了就说明用户证书已过期需要重新鉴权登录

再次我们把access-token设为10ms过期,启动后,tokenUtils会自动将其刷新并提示内容已经刷新

@Test
    public void tesReFreshToken(){
        User user = new User("Genius",18);
        Claims claims = Jwts.claims();
        claims.put("user",user);
        Token<User> token = tokenUtils.createToken(
                Map.of("type","jwt","alg","HS256"), //token头信息
                claims,                                             //token payload
                new Date(),                                         //token签发时间
                new Date(new Date().getTime() + 10),           //token过期时间
                new Date(new Date().getTime() + 120*1000),          //token刷新时间,如果未启用则无效
                new Date(new Date().getTime()),           //Token生效时间
                "Genius",                                           //token签名者
                "public Path",                                      //公共区域
                tokenUtils.getJwtTokenProperties().getJit(),        //token唯一身份标识
                "Genius",                                           //发布人
                true                                               //是否需要进行刷新操作
        );
        System.out.println(token.getAccessToken());
        System.out.println(tokenUtils.refreshToken(token).getAccessToken());

    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 输出
2023-04-04 20:44:39.836  INFO 37416 --- [           main] c.genius.assistant.util.token.TokenUtil  : refresh token is disable,if you want to enable it,please set JWTTokenProperties.EnableRefreshToken to true
2023-04-04 20:44:55.934  INFO 37416 --- [           main] c.genius.assistant.util.token.TokenUtil  : access-token is expire,refreshing!
1
2
  • 更多例子可查看test包下面的samples
  • TokenUtilsTest (opens new window)
帮助我们改善此页面! (opens new window)
上次更新: 2024/06/22, 16:36:11
代码生成器
正则工具类

← 代码生成器 正则工具类→

Theme by Vdoing | Copyright © 2016-2024 TimeMachine Lab | Sponsored by JetBrains | 渝ICP备2021000141号-1

友情链接:GeniusBlog

  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式