• 禅道登录-调用API方式


    禅道提供了API机制方便于大家和其他的系统进行集成,API机制也都是基于http协议的,返回的数据以json格式存储。禅道的API都是需要先登录后才能进行接口调用(登录返回的cookie需要在之后的每次请求中携带用于验证身份信息)。网上关于禅道API调用机制的说明相对较少,接下来我会从postman调用和Java代码两种方式来体现禅道整个登录过程

    注意:个别信息比较私密模糊展示不便于公开,请见谅!!

    目录

    流程图

    第一步、获取session

    第二步、登录-验证用户身份

    第三步、获取cookie

    参考代码--doGet()


    流程图

    第一步、获取session

    首先调用禅道提供的获取SessionID的API

    postman:

    接口返回的data中的sessionID对应的value值就是我们需要获取的sessionID值,用于后续禅道登录验证

    Java代码:

    1. //调用禅道接口获取sessionID
    2. String session = doGet("http://127.0.0.1/zentao/api-getSessionID.json", null, false);
    3. // json解析器-GSON
    4. JsonParser parse = new JsonParser();
    5. //将接口返回的字符串解析成json格式
    6. JsonObject jsonSession = (JsonObject) parse.parse(session);
    7. //将json格式中的data解析出来
    8. JsonObject jsonObj = (JsonObject) parse.parse(jsonSession.get("data").getAsJsonPrimitive().getAsString());
    9. //获取key为sessionID的值
    10. String sessionID = jsonObj.get("sessionID").toString();

    补充:Session的作用有哪些?

    Session可以在服务器端存储和跟踪用户会话信息,作用如下:

    1. 身份认证和用户登录:服务器可以跟踪用户的登录状态,记录用户的身份认证信息。当用户成功登录后,服务器会创建一个Session,并为该Session分配一个唯一的标识符(Session ID),将该Session ID发送给客户端保存。客户端在后续的请求中携带该Session ID,服务器通过Session ID来识别用户并验证其身份。

    2. 会话状态管理:服务器可以将用户的操作和状态信息存储在Session中,以便在后续的请求中使用。比如,在购物网站中,可以将用户的购物车信息存储在Session中,以便用户在不同页面之间保持购物车的状态。

    第二步、登录-验证用户身份

    现在我们就可以使用sessionID来用户身份验证进行登录了,登录的时候需要提供用户名和密码,变量名如下:account,password

    postman:

    将上一步获取到的sessionID放到url地址中,在Params以key、value的形式放置登陆的用户名和密码

    Java代码:

    1. //存储登录需要使用到的信息
    2. Map map = new HashMap();
    3. //账号
    4. map.put("account", "account");
    5. //密码
    6. map.put("password", "password");
    7. //sessionID
    8. map.put("zentaosid", "sessionID");
    9. //登录url
    10. String loginResult = doGet("http://127.0.0.1" +"//zentao/user-login-XXXX=.json", map, true);

    第三步、获取cookie

    登录成功之后我们把登录返回的cookie获取出来,用于调用其他API的携带信息了

    说明:在解析响应体信息时,

    postman:

    在上一步登录之后返回的Cookie中包含了名为【zentaosid】的key、value,其中zentaosid为cookie名,相应的value为值,我们只需要获取出来便可以进行其他API的调用了

    Java代码:

    1. /**
    2. * 用来存取cookies信息的变量.
    3. */
    4. private static CookieStore cookieStore;
    5. //获取登录过后的cookie 存入 cookieStore对象
    6. public static String GetCookies(HttpGet get) throws IOException {
    7. String result = null;
    8. try {
    9. if (null == cookieStore) {
    10. cookieStore = new BasicCookieStore();
    11. }
    12. //获取响应
    13. CloseableHttpClient httpClient = HttpClients.custom().setDefaultCookieStore(cookieStore).build();
    14. //执行请求
    15. CloseableHttpResponse response = httpClient.execute(get);
    16. result = EntityUtils.toString(response.getEntity(), "utf-8");
    17. // 获取cookies信息
    18. List cookies = cookieStore.getCookies();
    19. //解析出zentaosid
    20. for (Cookie cookie : cookies) {
    21. String name = cookie.getName();
    22. String value = cookie.getValue();
    23. if (name.equals("zentaosid")) {
    24. Constant.ZENTAOID = value;
    25. }
    26. }
    27. } catch (IOException e) {
    28. e.printStackTrace();
    29. }
    30. return result;
    31. }

    补充:Cookie的作用是什么?

    1. 身份认证和用户登录:当用户成功登录后,服务器会在响应中设置一个包含用户身份认证信息的Cookie,并发送给客户端保存。客户端在后续的请求中会携带该Cookie,服务器通过解析Cookie来验证用户的身份。

    2. 会话状态管理:服务器可以在响应中设置一个包含会话状态信息的Cookie,并发送给客户端保存。客户端在后续的请求中会携带该Cookie,服务器通过解析Cookie来获取和管理用户的会话状态。

    Cookie和Session的区别是什么?

     

    参考代码--doGet()

    作用:执行url请求调用

    1. //向指定url发起请求,可携带参数,并选择是否携带cookie
    2. public static String doGet(String url, Map params, boolean isCookie) {
    3. //获取httpclient客户端
    4. CloseableHttpClient httpclient = HttpClients.createDefault();
    5. String resultString = "";
    6. CloseableHttpResponse response = null;
    7. try {
    8. URIBuilder builder = new URIBuilder(url);
    9. if (null != params) {
    10. for (Object key : params.keySet()) {
    11. String keyStr = key.toString();
    12. String result = params.get(key).toString();
    13. builder.setParameter(keyStr, result);
    14. }
    15. }
    16. //Get请求
    17. HttpGet get = new HttpGet(builder.build());
    18. //判断是否需要传入cookie
    19. //是:调用GetCookies()方法获取cookie
    20. //否:执行请求
    21. if (!isCookie) {
    22. //执行请求
    23. response = httpclient.execute(get);
    24. //200表示接口调用成功
    25. if (200 == response.getStatusLine().getStatusCode()) {
    26. //HttpEntity表示http的request和resposne实体,它由消息头和消息体组成。
    27. //从HttpEntity中可以获取http请求头和回应头,也可以获取http请求体和回应体信息。
    28. HttpEntity entity = response.getEntity();
    29. resultString = EntityUtils.toString(entity, "utf-8");
    30. }
    31. } else {
    32. //调用GetCookies()方法获取cookie
    33. resultString = GetCookies(get);
    34. }
    35. } catch (Exception e) {
    36. e.printStackTrace();
    37. } finally {
    38. if (null != response) {
    39. try {
    40. response.close();
    41. } catch (IOException e) {
    42. e.printStackTrace();
    43. }
    44. }
    45. if (null != httpclient) {
    46. try {
    47. httpclient.close();
    48. } catch (IOException e) {
    49. e.printStackTrace();
    50. }
    51. }
    52. }
    53. return resultString;
    54. }

    参考链接:zentaoPHP二次开发简介 - zentaoPHP二次开发 - 易软天创开发者中心

    总结

    注意:个别信息比较私密模糊展示不便于公开,请见谅!!

    如果有想要交流的内容欢迎在评论区进行留言,如果这篇文档受到了您的喜欢那就留下你点赞收藏脚印支持一下博主哦~

  • 相关阅读:
    在windows的ubuntu LTS中安装及使用EZ-InSAR进行InSAR数据处理
    uniapp小程序实现上下固定中间滑动布局(附源码和实现过程讲解)
    做一个贪吃蛇小游戏happy一下
    学习orm全自动框架MyBatis-Plus,看这篇就够了
    运行stable-diffusion-xl-refiner-1.0遇到version `GLIBCXX_3.4.29‘ not found的问题
    pg 时间操作方法
    程序猿成长之路之数据挖掘篇——决策树分类算法(1)——信息熵和信息增益
    Python正则表达式保姆式教学,带你精通大名鼎鼎的正则!
    MyBatisPlus + ShardingJDBC 批量插入不返回主键ID
    毕业图形采集【个人】
  • 原文地址:https://blog.csdn.net/weixin_43319713/article/details/128169546