大屏监控 Metabase 集成到 Java 项目

669 篇文章 13 订阅
479 篇文章 11 订阅

前言

概述:Metabase可以帮助你把数据库中的数据更好地呈现给更多人,数据分析人员通过建立一个”查询“(Metabase中定义为Question)来提炼数据,再通过仪表盘(Dashboards)来组合展示给公司成员

分享

支持公开链接、公开嵌入、应用嵌入三种方式,前两种方式由于其公开性,只能分享一些见得人的数据,如果一些见不得人的数据就要通过第三种方式实现了。

这玩意官方案例支持 Python、Node、Ruby、Clojure,但就是不支持 Java,撸主只要自己手撸了。

集成

参考 Node.js 的集成方式:

// you will need to install via 'npm install jsonwebtoken' or in your package.json

var jwt = require("jsonwebtoken");

var METABASE_SITE_URL = "http://127.0.0.1:3000";
var METABASE_SECRET_KEY = "76e7feb6e9456f9f924a9f463d03cbcaedf72b4a68844fa88e5f05c6345d409d";

var payload = {
  resource: { dashboard: 2 },
  params: {},
  exp: Math.round(Date.now() / 1000) + (10 * 60) // 10 minute expiration
};
var token = jwt.sign(payload, METABASE_SECRET_KEY);

var iframeUrl = METABASE_SITE_URL + "/embed/dashboard/" + token + "#bordered=true&titled=true";

其实就是根据秘钥生成一个 Token,然后拼接到访问链接,后台再对其进行验证,如果 Token 有效则认证通过。

仿照撸一个Java版本:

import com.alibaba.fastjson.JSONObject;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Base64;
import java.util.Date;
import java.util.Map;

/**
 * 报表生成加密URL
 */
public class JWTUtils {

    /**
     * 创建token
     */
    public static String createJWT(Map<String, Object> payload, String secretKey){
        try {
            String metaBaseEncodedSecretKey = Base64.getEncoder().encodeToString(secretKey.getBytes());
            return Jwts.builder()
                    .setHeaderParam("typ", "JWT")
                    .setClaims(payload)
                    .signWith(SignatureAlgorithm.HS256, metaBaseEncodedSecretKey)
                    .setIssuedAt(new Date())
                    .compact();
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 创建token
     */
    public static String getTokenUrl(Integer dashboard,String secretKey){
        int round = Math.round(System.currentTimeMillis() / 1000)+10*60; // 10 minute expiration
        JSONObject resource = new JSONObject();
        resource.put("dashboard",dashboard);
        JSONObject payload = new JSONObject();
        payload.put("resource",resource);
        payload.put("params",new JSONObject());
        payload.put("exp",round);
        String token = JWTUtils.createJWT(payload,secretKey);
        return BI_SITE_URL + "/embed/dashboard/" + token + "#theme=night&bordered=false&titled=false";
    }

    private static final String BI_SITE_URL = "http://127.0.0.1:3000";

    public static void main(String[] args) {
        String secretKey = "******";
        String url = getTokenUrl(2,secretKey);
        System.out.println(url);
    }
}

预览

小结

安全认证之后的地址就可以分享出去了,后台可以对链接失效时间以及用户数据权限做验证,这样数据就只能让那些见不得人的看了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值