吉安感知网项目-后端
linwei
2026-07-10 2fd8b654d1eb9f1eb5e1a5537df845752f24726a
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
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-aisky-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;
    }
}