使用禅道 api 添加用户完整流程与分析

在使用禅道系统时,有时为了方便,需要与其他系统对接,如其他系统添加用户后可以直接同步到禅道系统,而不是在禅道系统重新添加一遍用户,禅道系统提供了二次开发的api,但是里面的内容并不详细,故笔者写这篇文章进行记录

 

这里先以 postman进行接口调用,演示流程,后面有可能会根据情况写一个 java版本的调用流程

添加用户的流程看下图

使用禅道 api 添加用户完整流程与分析

 

1、获取session

笔者这里禅道的地址是 http://192.168.0.113:8082/,读者可根据自己的情况做修改

请求下面地址获取 session

http://192.168.0.113:8082/zentao/api-getSessionID.json

 

使用禅道 api 添加用户完整流程与分析

 

这里获取的 sessionName和 sessionID要保存好,后面的所有接口都需要用

sessionName 就是 cookie的键,sessionID 是 cookie的值

 

2、通过接口登录禅道

登录接口地址

http://192.168.0.113:8082/zentao/user-login.json

postman请求带参数的地址:http://192.168.0.113:8082/zentao/user-login.json?zentaosid=f25a6fae708097cb212cf64f79c9afd5&account=admin&password=admin123456

 

使用禅道 api 添加用户完整流程与分析

 

3、获取添加用户页面数据

接口地址

http://192.168.0.113:8082/zentao/user-create-0.json

postman 请求地址:http://192.168.0.113:8082/zentao/user-create-0.json?zentaosid=f25a6fae708097cb212cf64f79c9afd5

 

使用禅道 api 添加用户完整流程与分析

这里返回的 json中 data里的数据,其实就是添加用户页面表单里可选择的各项数据,其中 rand用于密码加密,下面的添加用户接口需要用到,所以需要保存 rand的值,以备后面使用

这里的获取页面数据可以理解为 web端进入添加用户页面,准备添加用户,故每次添加用户前需先刷新添加用户页面,在接口中体现为重新请求这个接口以获得最新的 rand和其他数据的值

 

4、添加用户

接口地址

http://192.168.0.113:8082/zentao/user-create-0.json

postman请求地址:http://192.168.0.113:8082/zentao/user-create-0.json?zentaosid=f25a6fae708097cb212cf64f79c9afd5

 

使用禅道 api 添加用户完整流程与分析

用户详细参数

注意使用 postman的 post请求的话,用户详细数据不是写在 param中的,zentaosid写在 param中。用户详细数据写在 body的 form-data中

获取管理员和用户的加密密码

使用禅道 api 添加用户完整流程与分析

这个加密的实现流程会在后面详细说明

使用禅道 api 添加用户完整流程与分析

接口返回 success表示用户添加成功

可以登录 web页面进行查看

使用禅道 api 添加用户完整流程与分析

 

5、分析

下面介绍管理员密码和用户密码的加密值是怎么来的,以及用户数据的参数是怎么来的

首先是密码加密,因为禅道的api中没有详细说明,因此需要我们自己分析

登录禅道 web页面,打开添加用户页面,然后按 F12,添加完用户数据后点击保存,找到对应的请求进行分析

 

使用禅道 api 添加用户完整流程与分析

从上图可以看到添加用户都需要哪些参数,及这些参数的意义

看上图可知,管理员密码和用户密码都做了加密处理,那么密码加密的规则是什么呢?请往下看

在添加用户页面  查看网页源代码,搜索 md5,可找到下面的内容

 

使用禅道 api 添加用户完整流程与分析

上图是管理员密码加密规则,先对密码进行 md5加密,然后对加密后的密码和 rand拼接的字符串再进行 md5加密,rand其实充当了加密盐的作用

 

使用禅道 api 添加用户完整流程与分析

上图是用户密码加密规则,对用户密码进行 md5加密后与 rand拼接,返回给后台

 

知道管理员密码和用户密码加密规则后,就知道添加用户接口该传什么参数了,下面是笔者按照禅道的加密规则实现的加密流程代码

package com.tdemo.codec;

import java.security.MessageDigest;

public class Demo {

    public static void main(String[] args) {
        //管理员密码
        String adminPassword = "admin123456";
        //创建用户页面上的rand值
        String rand = "1440794478";
        //新建用户的密码
        String userPassword = "user123456";
        //按照禅道规则加密后的管理员密码
        System.out.println(md5(md5(adminPassword) + rand));
        //按照禅道规则加密后的新建用户密码
        System.out.println(md5(userPassword) + rand);
    }

    /**
     * md5加密算法
     * @param plainText
     * @return
     */
    public static String md5(String plainText) {
        String result = "";
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(plainText.getBytes());
            byte b[] = md.digest();
            int i;
            StringBuffer buf = new StringBuffer("");
            for (int offset = 0; offset < b.length; offset++) {
                i = b[offset];
                if (i < 0)
                    i += 256;
                if (i < 16)
                    buf.append("0");
                buf.append(Integer.toHexString(i));
            }
            result = buf.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
}

 

后续如果有时间和需要的话,可能会写一个 java调用 api 实现添加用户的流程总结

 

至此完

 

 

 

上一篇:生成验证码类


下一篇:探索Flutter_Image显示Webp逻辑