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

 

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

添加用户的流程看下图

禅道mysql启动 禅道新增用户_数据

 

1、获取session

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

请求下面地址获取 session

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

 

禅道mysql启动 禅道新增用户_数据_02

 

这里获取的 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

 

禅道mysql启动 禅道新增用户_数据_03

 

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

 

禅道mysql启动 禅道新增用户_数据_04

这里返回的 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

 

禅道mysql启动 禅道新增用户_json_05

用户详细参数

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

禅道mysql启动 禅道新增用户_数据_06

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

 

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

禅道mysql启动 禅道新增用户_json_07

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

可以登录 web页面进行查看

禅道mysql启动 禅道新增用户_json_08

 

5、分析

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

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

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

 

禅道mysql启动 禅道新增用户_json_09

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

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

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

 

禅道mysql启动 禅道新增用户_禅道mysql启动_10

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

 

禅道mysql启动 禅道新增用户_禅道mysql启动_11

上图是用户密码加密规则,对用户密码进行 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;
    }
}

 

6、退出

请求地址

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

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

 

禅道mysql启动 禅道新增用户_json_12

 

 

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

 

至此完