在使用禅道系统时,有时为了方便,需要与其他系统对接,如其他系统添加用户后可以直接同步到禅道系统,而不是在禅道系统重新添加一遍用户,禅道系统提供了二次开发的api,但是里面的内容并不详细,故笔者写这篇文章进行记录
这里先以 postman进行接口调用,演示流程,后面有可能会根据情况写一个 java版本的调用流程
添加用户的流程看下图
1、获取session
笔者这里禅道的地址是 http://192.168.0.113:8082/,读者可根据自己的情况做修改
请求下面地址获取 session
http://192.168.0.113:8082/zentao/api-getSessionID.json
这里获取的 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
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
这里返回的 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
用户详细参数
注意使用 postman的 post请求的话,用户详细数据不是写在 param中的,zentaosid写在 param中。用户详细数据写在 body的 form-data中
获取管理员和用户的加密密码
这个加密的实现流程会在后面详细说明
接口返回 success表示用户添加成功
可以登录 web页面进行查看
5、分析
下面介绍管理员密码和用户密码的加密值是怎么来的,以及用户数据的参数是怎么来的
首先是密码加密,因为禅道的api中没有详细说明,因此需要我们自己分析
登录禅道 web页面,打开添加用户页面,然后按 F12,添加完用户数据后点击保存,找到对应的请求进行分析
从上图可以看到添加用户都需要哪些参数,及这些参数的意义
看上图可知,管理员密码和用户密码都做了加密处理,那么密码加密的规则是什么呢?请往下看
在添加用户页面 查看网页源代码,搜索 md5,可找到下面的内容
上图是管理员密码加密规则,先对密码进行 md5加密,然后对加密后的密码和 rand拼接的字符串再进行 md5加密,rand其实充当了加密盐的作用
上图是用户密码加密规则,对用户密码进行 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 实现添加用户的流程总结
至此完