页面树结构

版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

...

如果在系统选项中设置了自定义的异常提示,前台的提示信息就不是很明显,此时可以打开系统监控然后监控日志,就能看到如下日志,可确认是上述问题中的那一个

image2024-12-31_9-24-27.pngimage2024-12-31_9-17-27.png


在使用令牌token的时候要如何避免这些问题,在生成和使用令牌的时候又要注意哪些问题呢?下面我们就用一个代码示例来确认来讲解:

代码块
languagejava
public class SmartbiToken {
    public static void main(String[] args) throws Exception {
        // 1、准备加密参数
        String secretKey = "12345678";// 密钥
        long timestamp =  new java.util.Date().getTime();// 必需是毫秒数的时间戳
        String userName = "admin";  // 用户名,可基于业务动态获取
        String password = "admin";  // 用户密码(可选),可基于业务动态获取

        // 准备加密的JSON串,用户密码可选
        String loginInfo= "{\"username\":\"" + userName + "\",\"password\":\"" + password + "\",\"timestamp\":" + timestamp + "}";

        // 2、进行加密
        String token  = CryptoUtil.encrypt(AlgorithmType.DES, loginInfo, secretKey);
        // 3、链接转码
        String encodedToken = java.net.URLEncoder.encode(token, "UTF-8");
        // 4、拼接登录链接
        String url = "http://localhost:8080/smartbi/vision/loginByToken?smartbiToken=" + encodedToken;

        // 6、拼接登录后的跳转请求
        String targetPath = "openresource.jsp?resid=I2c94ea86298cbe6c01298cfd9ba900fa";
        targetPath = java.net.URLEncoder.encode(targetPath, "UTF-8");
        String endUrl = url + "&targetPath=" + targetPath;
        System.out.println(endUrl);
    }
}


(1)加密参数部分

加密参数主要由四部分组成

  • 秘钥:设置的秘钥要与Smartbi的config界面配置的秘钥一致,不一致则可能会出现问题1“解析令牌失败”的问题另外令牌一般设置8个字符,否则AES算法时会加密异常。
  • 时间戳:时间戳需要获取当前时间,确保第三方系统时间和Smartbi服务器的时间差距不大,否则可能会出现问题2“令牌超时”的问题。
  • 用户名:用户名需要传入Smartbi上用户的用户名,同时确保Smartbi上存在对应用户,否则会出现问题2“用户不存在”的问题,需要做好用户同步
  • 密码:密码是可选传入,若config上配置了需要传入密码,则一定需要传入。
(2)进行加密

加密部分主要有主要有两种算法DES加密和AES-GCM加密

  • DES加密:CryptoUtil.encrypt(AlgorithmType.DES, loginInfo, 密钥)。
  • AES-GCM加密:smartbi.crypto.CryptoUtil.encrypt(loginInfo, 密钥) 或 CryptoUtil.encrypt(AlgorithmType.AES_GCM, loginInfo, secretKey)

注意秘钥长度,如果秘钥不是8个字符的,使用AES-GCM加密加密会报错如下:The key length must be 16 bytes

Image Added


(3)链接转码