From fe8fb7f2ec7939464f23c0c7ce1b26ae091c2b87 Mon Sep 17 00:00:00 2001 From: lqyan Date: Sun, 4 Feb 2024 12:02:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E5=8F=82=E6=95=B0=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E4=BC=9A=E8=AF=9D=E5=88=97=E8=A1=A8=E5=8F=8A=E6=89=A7?= =?UTF-8?q?=E8=A1=8C=E5=99=A8=E4=BB=A3=E7=A0=81=E7=9A=84=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sdk/openapi/api/JHApiExecution.java | 78 +++++++++- .../sdk/openapi/api/app/AppPathConstant.java | 5 + .../openapi/api/app/JHAppApiExecution.java | 49 ++++--- .../sdk/openapi/api/app/SessionInfo.java | 138 ++++++++++++++++++ .../sdk/openapi/client/JHApiClient.java | 25 +++- .../sdk/openapi/test/app/AppApiTest.java | 17 ++- 6 files changed, 282 insertions(+), 30 deletions(-) create mode 100644 src/main/java/com/jhinno/sdk/openapi/api/app/SessionInfo.java diff --git a/src/main/java/com/jhinno/sdk/openapi/api/JHApiExecution.java b/src/main/java/com/jhinno/sdk/openapi/api/JHApiExecution.java index a667e62..938665c 100644 --- a/src/main/java/com/jhinno/sdk/openapi/api/JHApiExecution.java +++ b/src/main/java/com/jhinno/sdk/openapi/api/JHApiExecution.java @@ -5,12 +5,15 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.jhinno.sdk.openapi.ArgsException; import com.jhinno.sdk.openapi.CommonConstant; import com.jhinno.sdk.openapi.ServiceException; +import com.jhinno.sdk.openapi.api.app.AppStartedInfo; import com.jhinno.sdk.openapi.api.auth.AuthPathConstant; import com.jhinno.sdk.openapi.api.auth.Token; import com.jhinno.sdk.openapi.client.JHApiClient; import org.apache.commons.lang3.StringUtils; +import java.lang.reflect.Type; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -103,12 +106,8 @@ public class JHApiExecution { String base64 = aes.encryptBase64(String.format("%s,%s", username, System.currentTimeMillis())); params.put("username", base64); String url = JHApiClient.getUrl(AuthPathConstant.AUTH_TOKEN_PATH, params); - ResponseResult result = jhApiClient.get(url, new TypeReference>() { + Token token = get(url, new TypeReference>() { }); - if (StringUtils.equals(result.getResult(), CommonConstant.FAILED)) { - throw new ServiceException(AuthPathConstant.AUTH_TOKEN_PATH, result.getCode(), result.getMessage()); - } - Token token = result.getData(); tokenInfo = new TokenInfo(); tokenInfo.setUserName(username); tokenInfo.setToken(token.getToken()); @@ -136,9 +135,78 @@ public class JHApiExecution { * @return 请求头 */ protected Map getHeaders(String username) { + if (StringUtils.isBlank(username)) { + return new HashMap<>(); + } Map headers = new HashMap<>(); headers.put("token", getToken(username)); return headers; } + /** + * 发起一个匿名的GET请求 + * + * @param path 请求路径 + * @param type 响应数据类型 + * @param 数据类型 + * @return 响应数据 + */ + public T get(String path, TypeReference> type) { + return get(path, null, type); + } + + /** + * 发起携带token的GET请求 + * + * @param username 用户名 + * @param path 请求路径 + * @param type 响应的数据类型 + * @param 数据类型 + * @return 返回的数据 + */ + public T get(String path, String username, TypeReference> type) { + ResponseResult result = jhApiClient.get(path, getHeaders(username), type); + if (StringUtils.equals(result.getResult(), CommonConstant.FAILED)) { + throw new ServiceException(AuthPathConstant.AUTH_TOKEN_PATH, result.getCode(), result.getMessage()); + } + return result.getData(); + } + + + /** + * 发起一个有返回值的POST请求 + * + * @param path 请求路径 + * @param username 用户名 + * @param body 请求体 + * @param type 强求提的数据类型 + * @param 返回的数据类型 + * @param 请求体的数据类型 + * @return 请求后的数据 + */ + public R post(String path, String username, B body, TypeReference> type) { + ResponseResult result = jhApiClient.post(path, body, getHeaders(username), type); + if (StringUtils.equals(result.getResult(), CommonConstant.FAILED)) { + throw new ServiceException(path, result.getCode(), result.getMessage()); + } + return result.getData(); + } + + + /** + * 发起一个没有返回值的POST请求 + * + * @param path 请求路径 + * @param username 用户名 + * @param body 请求体 + * @param 请求体数据类型 + */ + public void post(String path, String username, B body) { + ResponseResult result = jhApiClient.post(path, body, getHeaders(username), new TypeReference>() { + }); + if (StringUtils.equals(result.getResult(), CommonConstant.FAILED)) { + throw new ServiceException(path, result.getCode(), result.getMessage()); + } + } + } diff --git a/src/main/java/com/jhinno/sdk/openapi/api/app/AppPathConstant.java b/src/main/java/com/jhinno/sdk/openapi/api/app/AppPathConstant.java index 0129f85..7e34715 100644 --- a/src/main/java/com/jhinno/sdk/openapi/api/app/AppPathConstant.java +++ b/src/main/java/com/jhinno/sdk/openapi/api/app/AppPathConstant.java @@ -17,4 +17,9 @@ public class AppPathConstant { * 查询会列表 */ public static final String APPS_SESSIONS_ALL_PATH = "/ws/api/apps/sessions/all"; + + /** + * 使用参数查询会话列表 + */ + public static final String APPS_SESSIONS_PATH = "/ws/api/apps/sessions"; } diff --git a/src/main/java/com/jhinno/sdk/openapi/api/app/JHAppApiExecution.java b/src/main/java/com/jhinno/sdk/openapi/api/app/JHAppApiExecution.java index d40a3a4..9b0bea3 100644 --- a/src/main/java/com/jhinno/sdk/openapi/api/app/JHAppApiExecution.java +++ b/src/main/java/com/jhinno/sdk/openapi/api/app/JHAppApiExecution.java @@ -2,13 +2,13 @@ package com.jhinno.sdk.openapi.api.app; import cn.hutool.core.collection.CollectionUtil; import com.fasterxml.jackson.core.type.TypeReference; -import com.jhinno.sdk.openapi.CommonConstant; import com.jhinno.sdk.openapi.ServiceException; import com.jhinno.sdk.openapi.api.JHApiExecution; import com.jhinno.sdk.openapi.api.ResponseResult; import com.jhinno.sdk.openapi.client.JHApiClient; import org.apache.commons.lang3.StringUtils; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -37,14 +37,10 @@ public class JHAppApiExecution extends JHApiExecution { */ public AppStartedInfo desktopStart(String username, String appId, AppStartRequest appStartRequest) { String path = AppPathConstant.APPS_START_PATH.replace("{appId}", appId); - ResponseResult> result = jhApiClient.post(path, appStartRequest, getHeaders(username), new TypeReference>>() { + List data = post(path, username, appStartRequest, new TypeReference>>() { }); - if (StringUtils.equals(result.getResult(), CommonConstant.FAILED)) { - throw new ServiceException(path, result.getCode(), result.getMessage()); - } - List data = result.getData(); if (CollectionUtil.isEmpty(data)) { - throw new ServiceException(path, result.getCode(), "获取到的会话信息为空"); + throw new ServiceException(path, 500, "获取到的会话信息为空"); } return data.get(0); } @@ -68,18 +64,35 @@ public class JHAppApiExecution extends JHApiExecution { * * @return 会话列表 */ - public List> getDesktopList(String username) { - ResponseResult>> result = jhApiClient.get( - AppPathConstant.APPS_SESSIONS_ALL_PATH, - getHeaders(username), - new TypeReference>>>() { - }); - if (StringUtils.equals(result.getResult(), CommonConstant.FAILED)) { - throw new ServiceException(AppPathConstant.APPS_SESSIONS_ALL_PATH, result.getCode(), result.getMessage()); - } - return result.getData(); - + public List getDesktopList(String username) { + return get(AppPathConstant.APPS_SESSIONS_ALL_PATH, username, new TypeReference>>() { + }); } + /** + * 使用参数查询会话列表 + * + *

+ * 注:sessionIds 和 sessionName 不能同时为空 + *

+ * + * @param username 用户名 + * @param sessionIds 会话id列表 (非必填) + * @param sessionName 会话名称 (非必填) + * @return 会话列表 + */ + public List getDesktopsByParams(String username, List sessionIds, String sessionName) { + Map params = new HashMap<>(2); + if (CollectionUtil.isNotEmpty(sessionIds)) { + params.put("sessionIds", String.join(",", sessionIds)); + } + if (StringUtils.isNotBlank(sessionName)) { + params.put("sessionName", sessionName); + } + String path = JHApiClient.getUrl(AppPathConstant.APPS_SESSIONS_PATH, params); + return get(path, username, new TypeReference>>() { + }); + } + } diff --git a/src/main/java/com/jhinno/sdk/openapi/api/app/SessionInfo.java b/src/main/java/com/jhinno/sdk/openapi/api/app/SessionInfo.java new file mode 100644 index 0000000..8f5b0c7 --- /dev/null +++ b/src/main/java/com/jhinno/sdk/openapi/api/app/SessionInfo.java @@ -0,0 +1,138 @@ +package com.jhinno.sdk.openapi.api.app; + +import com.sun.java.swing.plaf.windows.resources.windows; +import lombok.Data; + +import java.util.Date; + +/** + * 会话信息 + * + * @author yanlongqi + * @date 2024/2/4 10:32 + */ +@Data +public class SessionInfo { + + /** + * 最后使用时间 + */ + private String lastUseTime; + /** + * 转移操作员权限 + */ + private String transfer_operator_right; + /** + * 操作员 + */ + private String operator; + /** + * 协议 + *
    + *
  • jhapp
  • + *
  • 其他
  • + *
+ */ + private String protocol; + + /** + * 主机 + */ + private String host; + /** + * + */ + private String backend; + + /** + * 会话id + */ + private String id; + /** + * 应用id + */ + private String app_id; + /** + * + */ + private Boolean isMtUsing; + /** + * 桌面类型 + */ + private String desktop_type; + /** + * 密级英文名 + */ + private String confidentialEn; + /** + * 创建时间 + */ + private String createDate; + /** + * 密级 + */ + private String confidential; + /** + * 会话属主 + */ + private String owner; + /** + * 密级中文名称 + */ + private String confidential_cn; + /** + * 操作系统 + */ + private String os; + /** + * 启动模式 + */ + private String startmode; + /** + * JHClient的地址(用于拉起对应会话的JHClient客户端) + *
    + *
  • + * 测试时:可将其粘贴纸浏览器的地址栏里面拉起JHClient客户端 + *
  • + *
  • + * 开发时:通过使用a标签,或者使用iframe的方式拉起JHClient客户端 + *
  • + *
+ */ + private String jhappUrl; + + /** + * 会话属主姓名 + */ + private String ownername; + + /** + * 是否分享给我 + */ + private Boolean shareMe; + + /** + * 会话id + */ + private String session_id; + /** + * 执行时间 + */ + private String executionTime; + /** + * 是否docker会话 + */ + private String isDocker; + /** + * 会话名称 + */ + private String name; + /** + * 是否共享 + */ + private Boolean isShare; + /** + * 状态 + */ + private String status; +} diff --git a/src/main/java/com/jhinno/sdk/openapi/client/JHApiClient.java b/src/main/java/com/jhinno/sdk/openapi/client/JHApiClient.java index d0fd6d4..b7a278c 100644 --- a/src/main/java/com/jhinno/sdk/openapi/client/JHApiClient.java +++ b/src/main/java/com/jhinno/sdk/openapi/client/JHApiClient.java @@ -1,5 +1,6 @@ package com.jhinno.sdk.openapi.client; +import cn.hutool.core.date.DatePattern; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.jhinno.sdk.openapi.ClientErrorCode; @@ -29,8 +30,10 @@ import java.net.URLEncoder; import java.security.KeyManagementException; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; +import java.text.SimpleDateFormat; import java.util.HashMap; import java.util.Map; +import java.util.TimeZone; /** * 提供请求的工具 @@ -48,6 +51,12 @@ public class JHApiClient { */ private final String baseUrl; + + /** + * 对象转换器 + */ + private ObjectMapper mapper; + /** * 初始化一个JHApiClient的实例,可使用自定义的客户端 * @@ -58,6 +67,9 @@ public class JHApiClient { this.baseUrl = baseUrl.endsWith("/") ? baseUrl.substring(0, baseUrl.length() - 1) : baseUrl; this.closeableHttpClient = closeableHttpClient; this.requestConfig = RequestConfig.custom().setSocketTimeout(DefaultHttpClientConfig.SOCKET_TIMEOUT).setConnectTimeout(DefaultHttpClientConfig.CONNECT_TIMEOUT).setConnectionRequestTimeout(DefaultHttpClientConfig.CONNECTION_REQUEST_TIMEOUT).build(); + mapper = new ObjectMapper(); + mapper.setTimeZone(TimeZone.getTimeZone("GMT+8")); + mapper.setDateFormat(new SimpleDateFormat(DatePattern.NORM_DATETIME_PATTERN)); } @@ -147,6 +159,16 @@ public class JHApiClient { } } + + /** + * 设置自定义的jackson序列化配置 + * + * @param mapper 序列化器 + */ + public void setMapper(ObjectMapper mapper) { + this.mapper = mapper; + } + /** *

* 设置一个HTTP请求的配置 @@ -217,7 +239,6 @@ public class JHApiClient { public T request(HttpRequestBase httpRequest, Map headers, TypeReference type) { try { InputStream content = request(httpRequest, headers).getContent(); - ObjectMapper mapper = new ObjectMapper(); return mapper.readValue(content, type); } catch (Exception e) { throw new ClientException(e.getMessage()); @@ -310,7 +331,6 @@ public class JHApiClient { HttpPost httpPost = new HttpPost(baseUrl + path); try { if (body != null) { - ObjectMapper mapper = new ObjectMapper(); String bodyStr = mapper.writeValueAsString(body); httpPost.setEntity(new StringEntity(bodyStr, "utf-8")); } @@ -339,7 +359,6 @@ public class JHApiClient { HttpPut httpPost = new HttpPut(baseUrl + path); try { if (body != null) { - ObjectMapper mapper = new ObjectMapper(); String bodyStr = mapper.writeValueAsString(body); httpPost.setEntity(new StringEntity(bodyStr, "utf-8")); } diff --git a/src/test/java/com/jhinno/sdk/openapi/test/app/AppApiTest.java b/src/test/java/com/jhinno/sdk/openapi/test/app/AppApiTest.java index 557c981..95e968a 100644 --- a/src/test/java/com/jhinno/sdk/openapi/test/app/AppApiTest.java +++ b/src/test/java/com/jhinno/sdk/openapi/test/app/AppApiTest.java @@ -3,11 +3,11 @@ package com.jhinno.sdk.openapi.test.app; import com.jhinno.sdk.openapi.api.app.AppStartRequest; import com.jhinno.sdk.openapi.api.app.AppStartedInfo; import com.jhinno.sdk.openapi.api.app.JHAppApiExecution; +import com.jhinno.sdk.openapi.api.app.SessionInfo; import com.jhinno.sdk.openapi.client.JHApiClient; import org.junit.Test; -import java.util.List; -import java.util.Map; +import java.util.*; /** * 会话启动相关单元测试 @@ -21,7 +21,7 @@ public class AppApiTest { /** * 初始化JHApi客户端 */ - public static final JHApiClient client = JHApiClient.build("https://192.168.87.25/appform"); + public static final JHApiClient client = JHApiClient.build("https://192.168.0.22/appform"); /** @@ -55,7 +55,16 @@ public class AppApiTest { */ @Test public void testGetSessionsList() { - List> desktopList = jhAppApiExecution.getDesktopList("jhadmin"); + List desktopList = jhAppApiExecution.getDesktopList("jhadmin"); + System.out.println(desktopList); + } + + /** + * 测试根据参数查询会话列表 + */ + @Test + public void testGetDesktopsByParams() { + List desktopList = jhAppApiExecution.getDesktopsByParams("jhadmin", null, "Windows桌面"); System.out.println(desktopList); } }