Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
KnowledgePlanet
road-map
chatglm-sdk-java
提交
7cde8daf
chatglm-sdk-java
项目概览
KnowledgePlanet
/
road-map
/
chatglm-sdk-java
通知
255
Star
21
Fork
10
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
chatglm-sdk-java
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
7cde8daf
编写于
10月 10, 2023
作者:
小傅哥
⛹
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat:智谱Ai签名Token工具类
上级
2c40431c
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
57 addition
and
0 deletion
+57
-0
src/main/java/cn/bugstack/chatglm/utils/BearerTokenUtils.java
...main/java/cn/bugstack/chatglm/utils/BearerTokenUtils.java
+57
-0
未找到文件。
src/main/java/cn/bugstack/chatglm/utils/BearerTokenUtils.java
0 → 100644
浏览文件 @
7cde8daf
package
cn.bugstack.chatglm.utils
;
import
com.auth0.jwt.JWT
;
import
com.auth0.jwt.algorithms.Algorithm
;
import
com.google.common.cache.Cache
;
import
com.google.common.cache.CacheBuilder
;
import
lombok.extern.slf4j.Slf4j
;
import
java.nio.charset.StandardCharsets
;
import
java.util.Calendar
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.concurrent.TimeUnit
;
/**
* @author 小傅哥,微信:fustack
* @description 签名工具包;过期时间30分钟,缓存时间29分钟
* @github https://github.com/fuzhengwei
* @Copyright 公众号:bugstack虫洞栈 | 博客:https://bugstack.cn - 沉淀、分享、成长,让自己和他人都能有所收获!
*/
@Slf4j
public
class
BearerTokenUtils
{
// 过期时间;默认30分钟
private
static
final
int
expireMillis
=
30
*
60
*
1000
;
// 缓存服务
public
static
Cache
<
String
,
String
>
cache
=
CacheBuilder
.
newBuilder
()
.
expireAfterWrite
(
expireMillis
-
(
60
*
1000
),
TimeUnit
.
MINUTES
)
.
build
();
/**
* 对 ApiKey 进行签名
*
* @param apiKey 登录创建 ApiKey <a href="https://open.bigmodel.cn/usercenter/apikeys">apikeys</a>
* @param apiSecret apiKey的后半部分 828902ec516c45307619708d3e780ae1.w5eKiLvhnLP8MtIf 取 w5eKiLvhnLP8MtIf 使用
* @return Token
*/
public
static
String
getToken
(
String
apiKey
,
String
apiSecret
)
{
// 缓存Token
String
token
=
cache
.
getIfPresent
(
apiKey
);
if
(
null
!=
token
)
return
token
;
// 创建Token
Algorithm
algorithm
=
Algorithm
.
HMAC256
(
apiSecret
.
getBytes
(
StandardCharsets
.
UTF_8
));
Map
<
String
,
Object
>
payload
=
new
HashMap
<>();
payload
.
put
(
"api_key"
,
apiKey
);
payload
.
put
(
"exp"
,
System
.
currentTimeMillis
()
+
expireMillis
);
payload
.
put
(
"timestamp"
,
Calendar
.
getInstance
().
getTimeInMillis
());
Map
<
String
,
Object
>
headerClaims
=
new
HashMap
<>();
headerClaims
.
put
(
"alg"
,
"HS256"
);
headerClaims
.
put
(
"sign_type"
,
"SIGN"
);
token
=
JWT
.
create
().
withPayload
(
payload
).
withHeader
(
headerClaims
).
sign
(
algorithm
);
cache
.
put
(
apiKey
,
token
);
return
token
;
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录