# 发布
通过发布功能,可以将已经开发完成的大屏
、看板
、驾驶舱
(以下统称:文件)
发布到线上环境,并进行方法权限的设置,供其他人员在线观看。
- 打开设计器,点击菜单栏上的发布按钮。
- 打开发布分享开关,即可通过下图的分享链接公开访问文件。
提示:
打开发布分享开关后,会随机生成一个分享链接,此链接每次打开之后都会变更,上一次的分享链接随即失效。
# 访问限制
提示:
开启访问限制
,分享链接才可进行相关访问验证限制,未开启访问限制
则分享链接可直接打开访问。
# 登录验证
# 个人空间
开启登录验证后,登录验证无用户或用户组选择功能,访问分享链接地址时,仅发布人员账号允许登录访问。
# 团队空间 2024.1+
开启登录验证后,登录验证可以选择可访问的用户或用户组,未指定时,当前团队空间下所有用户都允许登录访问,指定后,仅指定的用户或用户组中的用户允许登录访问。
# 密码访问
在发布弹框中,勾选密码验证。
在密码输入框中输入你的验证密码。
点击确定。
当访问发布链接中生成的链接时,系统会提示需要输入密码。输入正确的密码后,才能访问文件。
提示:
未勾选验证时效
选项时:每次访问文件时都需要输入密码。
# Token 验证
通过 Token 验证的方法将文件访问权限与其他系统进行集成。
在发布弹窗中,勾选Token 验证,即可开启 Token 验证功能,会生成一个 Token,如下图所示,您需要记录下这个 Token,以备后用。
# 验证规则
打开
发布分享
开关,记录文件发布的应用编码
示例:https://hetu.taiji.com.cn/share/index.html#/
TJ22558219572b438586be4d0f6d640e
将
编码
与当前时间(毫秒)
连起来,并用|(竖线)
分隔开。使用 Token 通过
HMAC-SHA256 base64
,对第 2 步得到的字符串进行加密。将时间和加密后的签名分别命名为
time
,signature
,放置到分享地址后面进行文件访问。示例:
https://hetu.taiji.com.cn/share/index.html#/TJ22558219572b438586be4d0f6d640e?time=1627791920059&signature=r4dBdgUswGOn2d2%2BJY5%2B7EoWYCQ9MNJjTLpGnndyEms%3D
验证失败,拒绝访问
提示:
默认 time 值与服务器时间的误差不超过 ±2 分钟,超过该误差限制后,生成的文件访问地址将失效
误差值可通过 config/application-prod.yml 文件中的hetu.tdv.release.max-time-difference
进行设置,单位为毫秒
# 示例代码:
import java.security.*;
import java.util.Date;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
import java.net.URLEncoder;
public class Test {
public static String getSignedUrl(String releaseCode, String token) {
Date date = new Date();
Long time = date.getTime();
String args = releaseCode + "|" + time;
String signature = hmacSHA256(args.getBytes(), token.getBytes());
//TODO 访问地址前缀根据实际进行修改
String url = "https://hetu.taiji.com.cn/share/index.html#/"
+ releaseCode + "?time=" + time + "&signature=" + signature;
return url;
}
public static String hmacSHA256(byte[] data, byte[] key) {
try {
SecretKeySpec signingKey = new SecretKeySpec(key, "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(signingKey);
return URLEncoder.encode(byte2Base64(mac.doFinal(data)));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private static String byte2Base64(byte[] bytes) {
return Base64.encodeBase64String(bytes);
}
public static void main(String[] args) throws Exception {
String token = "OZPNpJCvuQYkhYZ%2fwx0iHw%3d%3d";
System.out.println(getSignedUrl("TJ22558219572b438586be4d0f6d640e", token));
}
}
# 验证参数 2024.1+
勾选Token 验证后,方可选择验证参数,验证参数可以对链接中的自定义参数进行验证。
保证文件的 URL 访问链接的参数不能被篡改,从而提高文件数据以及用户信息的安全性。
提示:
使用访问参数时必须使用 Token 验证的访问控制。
# 校验规则
- 打开
发布分享
开关,记录文件发布的应用编码
- 将
编码
,参数
以及当前时间(毫秒)
连起来,并用|(竖线)
分隔开。 - 使用
Token
通过HMAC-SHA256 base64
,对第 2 步得到的字符串进行加密。 - 将时间和加密后的签名分别命名为
time
,signature
,参数
放置到分享地址后面进行文件访问。 - 如果签名参数验证失败,拒绝访问。
示例:
https://hetu.taiji.com.cn/share/index.html#/TJ22558219572b438586be4d0f6d640e?time=1627791920059&signature=r4dBdgUswGOn2d2%2BJY5%2B7EoWYCQ9MNJjTLpGnndyEms%3D&userId=1234&b=1
代码示例
public static String getSignedUrl(String releaseCode,String token){
Date date=new Date();
Long time=date.getTime();
String params="userId=1234&b=1";// 请求参数
String args=releaseCode+"|"+time+"|"+params;
String signature=hmacSHA256(args.getBytes(),token.getBytes());
//TODO 访问地址前缀根据实际进行修改
String url="https://hetu.taiji.com.cn/share/index.html#/"
+releaseCode+"?time="+time+"&signature="+signature+"&"+params;
return url;
}
# 验证时效
勾选验证时效:可以设置安全验证的有效器
设置 0 天,每次访问需要进行安全验证
设置(1,180)天,安全验证通过后,在设置时间内访问文件不需要验证,超过时间需要重新验证。
未勾选验证时效:每次访问需要进行安全验证。
如果开启
Token验证
,验证时效
为 Token 值的有效时间
。
# 注意事项
开启
访问限制
功能时,登录验证
,密码验证
,Token 验证
必须勾选一项。密码验证
和Token 验证
可同时使用。当
密码验证
通过之后再进行Token 验证
。时间规则: 例如:发布时间
2021-08-01
,验证时效设置为3天
,则验证的有效期限为:2021-08-01 00:00:00~2021-08-04 23:59:59
参数验证的前置条件必须开启 Token 验证。