新数据工厂插件使用场景二 参数间运算

楼主
插件开发者

使用场景为:

有两个接口,

第一个接口返回一个accessToken,

第二个接口需要传递accessToken来获取数据,并且还需要传递一个签名参数,签名参数的签名规则为:

   将第一个接口获取到的accessToken与一个签名密钥,当前时间戳进行base64加密,即 accessToken+":"+signSecret+":"+timestamp ,将这个串进行base64加密。

  相当于第二个接口需要传递的参数为:accessToken,sign,timestamp。

 signSecret的值前后端约定一致即可,这里是后端写死,前端放到报表的一个单元格上。

 前端按照accessToken+":"+signSecret+":"+timestamp规则生成base64加密数据以sign参数传递到后台,

 后端根据传递来的参数也生成一个base64加密数据,两者对比,对比成功返回数据。

第一个接口测试代码为:

    @RequestMapping(
            value = {"df_test/getAccessToken"},
            method = {RequestMethod.GET}
    )
    @ResponseBody
    public String getAccessToken(HttpServletRequest req, HttpServletResponse res) throws Exception {
        String orginUrl = WebUtils.getOriginalURL(req);
        LogManager.info(orginUrl);
        String appId = req.getParameter("appId");
        String appSeret = req.getParameter("appSeret");
        HashMap resultMap = new HashMap();
        resultMap.put("code", 200);
        resultMap.put("errorMsg", "");
        resultMap.put("data", new HashMap<>());
        if ("abc".equals(appId) && "123456".equals(appSeret)) {
            HashMap tokenMap = new HashMap();
            tokenMap.put("accessToken", "asdasd123123234asdads");
            resultMap.put("data", tokenMap);
        } else {
            resultMap.put("code", 1000);
            resultMap.put("errorMsg", "appId,appSeret不正确");
        }
        return JSONUtils.toJSONString(resultMap);
    }

 

第二个接口的测试代码为:

 @RequestMapping(
            value = {"df_test/getDatasByToken"},
            method = {RequestMethod.GET}
    )
    @ResponseBody
    public String getDatasByToken(HttpServletRequest req, HttpServletResponse res) throws Exception {
        String accessToken = req.getParameter("accessToken");
        String timestamp = req.getParameter("timestamp");
        String sign = req.getParameter("sign");
        String signSecret = "123456abc*&";
        HashMap resultMap = new HashMap();
        resultMap.put("code", 200);
        resultMap.put("errorMsg", "");
        ArrayList<HashMap> datas = new ArrayList<HashMap>();
        resultMap.put("data", datas);
        String mySign = Base64.getEncoder().encodeToString((accessToken + ":" + signSecret + ":" + timestamp).getBytes());
        if (!mySign.equals(sign)) {
            resultMap.put("code", 1000);
            resultMap.put("errorMsg", "签名不正确");
        } else {
            if ("asdasd123123234asdads".equals(accessToken)) {
                for (int i = 0; i < 5; i++) {
                    HashMap itemMap = new HashMap();
                    datas.add(itemMap);
                    itemMap.put("name", "学生" + (i + 1));
                    itemMap.put("age", 20 + i);
                }
            } else {
                resultMap.put("code", 1000);
                resultMap.put("errorMsg", "accessToken不正确");
            }
        }
        return JSONUtils.toJSONString(resultMap);
    }

 

配置如下

 第一个接口的配置为:

测试结果为:

从图中可以看到已经获取到accessToken的值了。

 

第二个接口的配置为:

测试结果为:

从图中可以看到接口报签名错误的提示,这里我们还没有对sign参数进行base64加密,需要到设计器中去配置。

设计器中配置为:

运行截图:

 

 

从这里可以看到后台生成的mySign值与前端传递过来的sign值是一样的。这样就得到了数据。

 

 

分享扩散:

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

返回顶部 返回列表