# 发布
通过发布功能,可以将已经开发完成的大屏发布到线上环境,并进行方法权限的设置,供其他人员在线观看。
- 打开设计器,点击菜单栏上的发布按钮。
- 打开发布分享开关,即可通过下图的分享链接公开访问大屏。
提示:
打开发布分享开关后,会随机生成一个分享链接,此链接每次打开之后都会变更,上一次的分享链接随即失效。
# 访问限制
# 登录验证 3.0+
访问发布地址时,必须进行登陆,主要用于根据登陆人的不同,进行数据权限过滤。
# 密码访问
在发布弹框中,勾选密码验证。
在密码输入框中输入你的验证密码。
点击确定。
当访问发布链接中生成的链接时,系统会提示需要输入密码。输入正确的密码后,才能访问大屏。
提示:
未勾选验证时效
选项时:每次访问大屏时都需要输入密码。
# Token 验证 3.1+
通过 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=1627791920059signature=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());
String url = "https://hetu.taiji.com.cn/share/index.html#/"+ releaseCode +
"?time=" + time + "&signature=" + signature;
return url;
}
/**
* 使用java原生的摘要实现SHA256加密。
* @param str加密后的报文。
* @return
*/
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 (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
}
return null;
}
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));
}
}
# 访问参数校验 3.1+
保证大屏的 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
代码示例
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());
# 验证时效
勾选验证时效:可以设置安全验证的有效器
设置 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 验证
直接传递参数的功能将失效。3.1+