# 发布

通过发布功能,可以将已经开发完成的大屏发布到线上环境,并进行方法权限的设置,供其他人员在线观看。

  1. 打开设计器,点击菜单栏上的发布按钮。
  2. 打开发布分享开关,即可通过下图的分享链接公开访问大屏。

发布介绍

提示:

打开发布分享开关后,会随机生成一个分享链接,此链接每次打开之后都会变更,上一次的分享链接随即失效。

# 访问限制

# 登陆验证 3.0+

访问发布地址时,必须进行登陆,主要用于根据登陆人的不同,进行数据权限过滤。

# 密码访问

  1. 在发布弹框中,勾选密码验证。

  2. 在密码输入框中输入你的验证密码。

  3. 点击确定。

  4. 当访问发布链接中生成的链接时,系统会提示需要输入密码。输入正确的密码后,才能访问大屏。

    密码验证

提示:

未勾选验证时效选项时:每次访问大屏时都需要输入密码。

# Token 验证 3.1+

通过 Token 验证的方法将大屏访问权限与其他系统进行集成。

在发布弹窗中,勾选Token 验证,即可开启 Token 验证功能,会生成一个 Token,如下图所示,您需要记录下这个 Token,以备后用。

token验证

# 验证规则

  1. 打开发布分享开关,记录大屏发布的应用编码

    示例:https://hetu.taiji.com.cn/share/index.html#/TJ22558219572b438586be4d0f6d640e

  2. 编码当前时间(毫秒)连起来,并用|(竖线)分隔开。

  3. 使用 Token 通过 HMAC-SHA256 base64,对第 2 步得到的字符串进行加密。

  4. 将时间和加密后的签名分别命名为 timesignature,放置到分享地址后面进行大屏访问。

    示例:

    https://hetu.taiji.com.cn/share/index.html#/TJ22558219572b438586be4d0f6d640e?time=1627791920059signature=r4dBdgUswGOn2d2%2BJY5%2B7EoWYCQ9MNJjTLpGnndyEms%3D
    
  5. 验证失败,拒绝访问

提示:

默认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 验证的访问控制。

# 校验规则

  1. 打开发布分享开关,记录大屏发布的应用编码
  2. 编码参数以及当前时间(毫秒)连起来,并用|(竖线)分隔开。
  3. 使用Token通过HMAC-SHA256 base64,对第 2 步得到的字符串进行加密。
  4. 将时间和加密后的签名分别命名为timesignature参数放置到分享地址后面进行大屏访问。
  5. 如果签名参数验证失败,拒绝访问。

示例

 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+

Last Updated: 9/3/2021, 10:33:26 AM