package org.sxkj.resource.util;
|
|
|
import com.auth0.jwt.JWT;
|
import com.auth0.jwt.algorithms.Algorithm;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Component;
|
|
import java.util.Map;
|
|
/**
|
* OnlyOffice JWT令牌生成工具类
|
* <p>
|
* 用于生成OnlyOffice Document Server所需的JWT令牌,
|
* 密钥通过Nacos配置中心统一管理。
|
* </p>
|
*
|
* @author sxkj
|
*/
|
@Slf4j
|
@Component
|
public class OnlyofficeJwt {
|
|
/**
|
* JWT令牌签名密钥,从Nacos配置读取
|
*/
|
@Value("${onlyoffice.token-secret:ztzf-wv5d0-kx5xo-dx2w2-xpx5q}")
|
private String tokenSecret;
|
|
/**
|
* 生成JWT令牌并将令牌添加到配置Map中
|
* <p>
|
* 使用HMAC256算法对OnlyOffice配置进行签名,
|
* 生成令牌后将其放入config的token字段。
|
* </p>
|
*
|
* @param config OnlyOffice编辑器配置Map,包含document、editorConfig等信息
|
* @return 添加了token字段的配置Map
|
*/
|
public Map<String, Object> getToken(Map<String, Object> config) {
|
String token = "";
|
try {
|
// 1. 使用配置的密钥创建HMAC256签名算法
|
Algorithm algorithm = Algorithm.HMAC256(tokenSecret);
|
|
// 2. 基于config负载生成JWT令牌
|
token = JWT.create()
|
.withPayload(config)
|
.sign(algorithm);
|
} catch (Exception e) {
|
log.error("生成OnlyOffice JWT令牌失败: {}", e.getMessage(), e);
|
token = "";
|
}
|
|
// 3. 将生成的令牌放入配置中
|
config.put("token", token);
|
return config;
|
}
|
}
|