diff --git a/jhinno-openapi-java-sdk/pom.xml b/jhinno-openapi-java-sdk/pom.xml
index 9e84dfb..3436559 100644
--- a/jhinno-openapi-java-sdk/pom.xml
+++ b/jhinno-openapi-java-sdk/pom.xml
@@ -5,7 +5,7 @@
4.0.0
jhinno-openapi-java-sdk
- 2.0.5
+ 2.0.6
jar
Jhinno OpenAPI SDK for Java
The Jhinno OpenAPI SDK for Java used for accessing Jhinno OpenApi Service
diff --git a/jhinno-openapi-java-sdk/src/main/java/com/jhinno/sdk/openapi/JHApiExecution.java b/jhinno-openapi-java-sdk/src/main/java/com/jhinno/sdk/openapi/JHApiExecution.java
deleted file mode 100644
index 89aaa62..0000000
--- a/jhinno-openapi-java-sdk/src/main/java/com/jhinno/sdk/openapi/JHApiExecution.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.jhinno.sdk.openapi;
-
-import com.jhinno.sdk.openapi.api.JHRequestExecution;
-
-public interface JHApiExecution {
-
- /**
- * 初始化API执行器
- */
- void init(JHRequestExecution execution);
-
-}
diff --git a/jhinno-openapi-java-sdk/src/main/java/com/jhinno/sdk/openapi/JHApiExecutionAbstract.java b/jhinno-openapi-java-sdk/src/main/java/com/jhinno/sdk/openapi/JHApiExecutionAbstract.java
index 1904b3e..485b5dd 100644
--- a/jhinno-openapi-java-sdk/src/main/java/com/jhinno/sdk/openapi/JHApiExecutionAbstract.java
+++ b/jhinno-openapi-java-sdk/src/main/java/com/jhinno/sdk/openapi/JHApiExecutionAbstract.java
@@ -1,13 +1,20 @@
package com.jhinno.sdk.openapi;
import com.jhinno.sdk.openapi.api.JHRequestExecution;
+import lombok.Setter;
+@Setter
public abstract class JHApiExecutionAbstract {
-
+ // 提供setter方法,支持依赖注入
protected JHRequestExecution execution;
- public void init(JHRequestExecution execution) {
+ // 默认构造函数,允许子类不实现构造方法
+ public JHApiExecutionAbstract() {
+ }
+
+ // 带参数的构造函数,允许直接注入
+ public JHApiExecutionAbstract(JHRequestExecution execution) {
this.execution = execution;
}
diff --git a/jhinno-openapi-java-sdk/src/main/java/com/jhinno/sdk/openapi/JHApiExecutionManage.java b/jhinno-openapi-java-sdk/src/main/java/com/jhinno/sdk/openapi/JHApiExecutionManage.java
index 2916d4c..4c9a0c8 100644
--- a/jhinno-openapi-java-sdk/src/main/java/com/jhinno/sdk/openapi/JHApiExecutionManage.java
+++ b/jhinno-openapi-java-sdk/src/main/java/com/jhinno/sdk/openapi/JHApiExecutionManage.java
@@ -23,13 +23,18 @@ public class JHApiExecutionManage {
*
* @param appformBaseUrl 景行API的URL
*/
- public JHApiExecutionManage(String appformBaseUrl) {
+ public JHApiExecutionManage(String appformBaseUrl, JHApiRequestHandler requestHandler) {
JHApiClient client = new JHApiClient(appformBaseUrl);
client.initDefaultApiClient();
- EXECUTION = new JHRequestExecution(client);
+ EXECUTION = new JHRequestExecution(client, requestHandler);
initApiExecution();
}
+ public JHApiExecutionManage(String appformBaseUrl) {
+ this(appformBaseUrl, new JHApiRequestHandler() {
+ });
+ }
+
/**
* 创建一个带有自定义HTTP客户端的API执行管理器
*
@@ -71,7 +76,7 @@ public class JHApiExecutionManage {
* @param execution 自定义的执行器实例
*/
public void registerApiExecution(JHApiExecutionAbstract execution) {
- execution.init(EXECUTION);
+ execution.setExecution(EXECUTION);
API_CLIENT_MAP.put(execution.getClass(), execution);
}
diff --git a/jhinno-openapi-java-sdk/src/main/java/com/jhinno/sdk/openapi/JHApiRequestHandler.java b/jhinno-openapi-java-sdk/src/main/java/com/jhinno/sdk/openapi/JHApiRequestHandler.java
new file mode 100644
index 0000000..52a8494
--- /dev/null
+++ b/jhinno-openapi-java-sdk/src/main/java/com/jhinno/sdk/openapi/JHApiRequestHandler.java
@@ -0,0 +1,26 @@
+package com.jhinno.sdk.openapi;
+
+
+import java.util.Map;
+
+public interface JHApiRequestHandler {
+
+ /**
+ * 获取当前登录的用户名
+ *
+ * @return 用户名
+ */
+ default String getCurrentUserName() {
+ return null;
+ }
+
+ /**
+ * 构建一个带token的请求头
+ *
+ * @param headers 处理器的请求头
+ * @return 请求头
+ */
+ default Map getHeaders(Map headers) {
+ return headers;
+ }
+}
diff --git a/jhinno-openapi-java-sdk/src/main/java/com/jhinno/sdk/openapi/api/JHRequestExecution.java b/jhinno-openapi-java-sdk/src/main/java/com/jhinno/sdk/openapi/api/JHRequestExecution.java
index e39bae4..f7df942 100644
--- a/jhinno-openapi-java-sdk/src/main/java/com/jhinno/sdk/openapi/api/JHRequestExecution.java
+++ b/jhinno-openapi-java-sdk/src/main/java/com/jhinno/sdk/openapi/api/JHRequestExecution.java
@@ -43,6 +43,11 @@ import java.util.concurrent.ConcurrentHashMap;
@NoArgsConstructor
public class JHRequestExecution {
+ /**
+ * 用户令牌的缓存
+ */
+ private static final Map TOKEN_INFO_MAP = new ConcurrentHashMap<>(20);
+
/**
* JHApiClient实例
*/
@@ -84,29 +89,49 @@ public class JHRequestExecution {
*/
private String accessKeySecret;
+ private JHApiRequestHandler requestHandler;
+
/**
* 获取一个执行器的实例
*
+ * @param jhApiClient 请求的客户端
+ * @param requestHandler 请求头处理器
+ */
+ public JHRequestExecution(JHApiClient jhApiClient, JHApiRequestHandler requestHandler) {
+ this.jhApiClient = jhApiClient;
+ this.requestHandler = requestHandler;
+ }
+
+
+ /**
+ * 创建一个默认的请求处理器
+ *
* @param jhApiClient 请求的客户端
*/
public JHRequestExecution(JHApiClient jhApiClient) {
this.jhApiClient = jhApiClient;
+ this.requestHandler = new JHApiRequestHandler() {
+ };
+ }
+
+
+ public String getUserName(String userName) {
+ if (StringUtils.isNotBlank(userName)) {
+ return userName;
+ }
+ return requestHandler.getCurrentUserName();
}
/**
- * 用户令牌的缓存
- */
- private static final Map TOKEN_INFO_MAP = new ConcurrentHashMap<>(20);
-
- /**
- * 设置是否使用服务器时间
+ * 获取当前用户的token
*
- * @param usedServerTime 是否使用服务器时间
+ * @return 用户token
*/
- public void setUsedServerTime(boolean usedServerTime) {
- isUsedServerTime = usedServerTime;
+ public String getToken() {
+ return getToken(requestHandler.getCurrentUserName());
}
+
/**
* 获取用户的Token
*
@@ -122,9 +147,9 @@ public class JHRequestExecution {
// 防止因为服务器时间的问题二导致token不可用,可以通过此配置提前获取token
int tokenEffectiveTime = (tokenTimeout - tokenResidueTime) * 60 * 1000;
- // 如果是强制获取、用户令牌为空、用户令牌过期等,则获取令牌
- if (isForceGetToken || tokenInfo == null
- || System.currentTimeMillis() - tokenInfo.getCurrentTimestamp() > tokenEffectiveTime) {
+ // 如果是强制获取用户令牌为空、用户令牌不存在、用户令牌过期等,则获取令牌
+ boolean isGetToken = isForceGetToken || tokenInfo == null || System.currentTimeMillis() - tokenInfo.getCurrentTimestamp() > tokenEffectiveTime;
+ if (isGetToken) {
Map params = new HashMap<>(2);
params.put("timeout", tokenTimeout);
String currentTimeMillis = getCurrentTimeMillis();
@@ -139,13 +164,9 @@ public class JHRequestExecution {
} catch (Exception e) {
throw new ClientException("AES加密失败,失败原因:" + e.getMessage(), e);
}
-
- String url = JHApiClient.getUrl(AuthPathConstant.AUTH_TOKEN_PATH, params);
- Map token = get(url, new TypeReference>>() {
- });
tokenInfo = new TokenInfo();
tokenInfo.setUserName(username);
- tokenInfo.setToken(token.get("token"));
+ tokenInfo.setToken(requestToken(params));
tokenInfo.setCurrentTimestamp(System.currentTimeMillis());
TOKEN_INFO_MAP.put(username, tokenInfo);
}
@@ -153,7 +174,9 @@ public class JHRequestExecution {
}
/**
- * @return
+ * 获得当前的时间
+ *
+ * @return 当前时间
*/
public String getCurrentTimeMillis() {
if (authType == AuthType.ACCESS_SECRET_MODE || !isUsedServerTime) {
@@ -162,14 +185,37 @@ public class JHRequestExecution {
return jhApiClient.getAppformServerCurrentTimeMillis();
}
+
/**
- * 构建一个带token的请求头
+ * 获得最终的请求头
*
* @param username 用户名
* @param isContentType 是否携带默认的Content-type,默认为{@link ContentType#APPLICATION_JSON}
* @return 请求头
*/
public Map getHeaders(String username, boolean isContentType) {
+ Map defaultHeaders = getDefaultHeaders(getUserName(username), isContentType);
+ return requestHandler.getHeaders(defaultHeaders);
+ }
+
+ /**
+ * 获得当前用户的请求头
+ *
+ * @param isContentType 是否携带默认的Content-type,默认为{@link ContentType#APPLICATION_JSON}
+ * @return 请求头
+ */
+ public Map getHeaders(boolean isContentType) {
+ return getHeaders(null, isContentType);
+ }
+
+ /**
+ * 构建一个默认参数的请求头
+ *
+ * @param username 用户名
+ * @param isContentType 是否携带默认的Content-type,默认为{@link ContentType#APPLICATION_JSON}
+ * @return 请求头
+ */
+ private Map getDefaultHeaders(String username, boolean isContentType) {
Map headers = new HashMap<>();
// 默认请求json数据
if (isContentType) {
@@ -198,6 +244,16 @@ public class JHRequestExecution {
return headers;
}
+ /**
+ * 获得一个签名
+ *
+ * @param currentTimeMillis 时间戳
+ * @return 签名
+ */
+ public String getsSignature(String currentTimeMillis) {
+ return getsSignature(requestHandler.getCurrentUserName(), currentTimeMillis);
+ }
+
/**
* 获取签名
*
@@ -259,6 +315,17 @@ public class JHRequestExecution {
return result.getData();
}
+ private String requestToken(Map params) {
+ String url = JHApiClient.getUrl(AuthPathConstant.AUTH_TOKEN_PATH, params);
+ ResponseResult