Skip to content

Commit be0595a

Browse files
authored
Merge pull request #27 from lexiLiu/1.0.0.8
[update]
2 parents 4eb2d24 + 0aacc64 commit be0595a

13 files changed

Lines changed: 113 additions & 26 deletions

File tree

CHANGES.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# Release Notes
22

3+
## 1.0.0.8
4+
### update
5+
* ApiHelper和DefaultApiClient 缓存key支持设置自定义前缀,满足客户特殊使用场景
6+
* 完善参数和注释
7+
38
## 1.0.0.7
49
### Fix
510
* 修复超时重试http连接未释放问题

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
<dependency>
2323
<groupId>com.getui.push</groupId>
2424
<artifactId>restful-sdk</artifactId>
25-
<version>1.0.0.7</version>
25+
<version>1.0.0.8</version>
2626
</dependency>
2727
```
2828

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<groupId>com.getui.push</groupId>
88
<artifactId>restful-sdk</artifactId>
99
<packaging>jar</packaging>
10-
<version>1.0.0.7</version>
10+
<version>1.0.0.8</version>
1111
<url>https://github.com/GetuiLaboratory/getui-pushapi-java-client-v2</url>
1212
<name>Getui Push API Java Client</name>
1313
<description>Getui's officially supported Java client library for accessing Getui APIs.</description>

src/main/java/com/getui/push/v2/sdk/ApiHelper.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
import com.getui.push.v2.sdk.core.client.DefaultApiClient;
99
import com.getui.push.v2.sdk.core.factory.GtApiProxyFactory;
1010

11-
import java.util.HashMap;
1211
import java.util.Map;
12+
import java.util.concurrent.ConcurrentHashMap;
1313

1414
/**
1515
* create by getui on 2020/6/7
@@ -22,7 +22,7 @@ public class ApiHelper {
2222

2323
private static final Object BUILD_LOCK = new Object();
2424

25-
private static final Map<String, ApiHelper> apiHelperCache = new HashMap<String, ApiHelper>(4);
25+
private static final Map<String, ApiHelper> apiHelperCache = new ConcurrentHashMap<String, ApiHelper>(4);
2626

2727
/**
2828
* @param configuration 配置信息类
@@ -62,6 +62,11 @@ public static ApiHelper build(GtApiConfiguration configuration, IJson json) {
6262
}
6363
}
6464

65+
/**
66+
* 删除缓存,并关闭守护线程,不影响已创建的Api的使用
67+
*
68+
* @param configuration
69+
*/
6570
public static void close(GtApiConfiguration configuration) {
6671
Assert.notNull(configuration, "configuration");
6772
configuration.check();

src/main/java/com/getui/push/v2/sdk/common/Config.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,5 @@ public class Config {
1313
public static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1");
1414
public static final Charset UTF_8 = Charset.forName("UTF-8");
1515
public final static String CHECK_HEALTH_DATA_SWITCH_KEY = GtApiConfiguration.CHECK_HEALTH_DATA_SWITCH_KEY;
16+
public static final String AUTH_URI = "/auth";
1617
}

src/main/java/com/getui/push/v2/sdk/common/http/GtHttpClient.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,12 @@ private String doRequest(HttpUriRequest request, int tryTimes) {
131131
response = httpclient.execute(request);
132132
final StatusLine statusLine = response.getStatusLine();
133133
code = statusLine.getStatusCode();
134+
String responseBody = "";
134135
// toString内部回收connection
135-
String responseBody = EntityUtils.toString(response.getEntity());
136+
HttpEntity entity = response.getEntity();
137+
if (entity != null) {
138+
responseBody = EntityUtils.toString(entity);
139+
}
136140
if (code == HttpURLConnection.HTTP_OK ||
137141
code == HttpURLConnection.HTTP_BAD_REQUEST ||
138142
code == HttpURLConnection.HTTP_UNAUTHORIZED ||

src/main/java/com/getui/push/v2/sdk/core/Configs.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public interface Configs {
1313

1414
String HEADER_DOMAIN_HASH_KEY = "domainHash";
1515
String HEADER_OPEN_STABLE_DOMAIN = "openStableDomain";
16-
String SDK_VERSION = "1.0.0.7";
16+
String SDK_VERSION = "1.0.0.8";
1717
/**
1818
* 预置域名列表
1919
*/

src/main/java/com/getui/push/v2/sdk/core/client/DefaultApiClient.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import com.getui.push.v2.sdk.common.ApiException;
77
import com.getui.push.v2.sdk.common.ApiResult;
88
import com.getui.push.v2.sdk.common.Assert;
9+
import com.getui.push.v2.sdk.common.Config;
910
import com.getui.push.v2.sdk.common.http.HttpManager;
11+
import com.getui.push.v2.sdk.common.type.TypeReference;
1012
import com.getui.push.v2.sdk.common.util.Utils;
1113
import com.getui.push.v2.sdk.core.Configs;
1214
import com.getui.push.v2.sdk.core.domain.RasDomainBO;
@@ -24,6 +26,7 @@
2426
import java.security.InvalidParameterException;
2527
import java.util.*;
2628
import java.util.concurrent.*;
29+
import java.util.regex.Pattern;
2730

2831
/**
2932
* 1. 管理token
@@ -107,6 +110,8 @@ public static DefaultApiClient build(GtApiConfiguration apiConfiguration, IJson
107110
while (iterator.hasNext()) {
108111
Map.Entry<String, DefaultApiClient> entry = iterator.next();
109112
if (entry.getKey().startsWith(prefixOfKey)) {
113+
// 缓存更新之前校验应用信息是否正确
114+
checkAppInfo(apiConfiguration, json);
110115
defaultApiClient = entry.getValue();
111116
defaultApiClient.apiConfiguration = apiConfiguration;
112117
iterator.remove();
@@ -121,6 +126,42 @@ public static DefaultApiClient build(GtApiConfiguration apiConfiguration, IJson
121126
return defaultApiClient;
122127
}
123128

129+
final static Pattern HIDE_MASTER_SECRET_PATTERN = Pattern.compile("(.{3}).+(.{3})");
130+
131+
static void checkAppInfo(GtApiConfiguration configuration, IJson json) {
132+
DefaultApiClient client = null;
133+
try {
134+
GtApiConfiguration apiConfiguration = new GtApiConfiguration();
135+
apiConfiguration.setAppId(configuration.getAppId());
136+
apiConfiguration.setAppKey(configuration.getAppKey());
137+
apiConfiguration.setMasterSecret(configuration.getMasterSecret());
138+
apiConfiguration.setDomain(configuration.getDomain());
139+
apiConfiguration.setOpenCheckHealthDataSwitch(false);
140+
apiConfiguration.setOpenAnalyseStableDomainSwitch(false);
141+
apiConfiguration.setTrustSSL(configuration.isTrustSSL());
142+
apiConfiguration.setProxyConfig(configuration.getProxyConfig());
143+
144+
client = new DefaultApiClient(apiConfiguration, json);
145+
final String fullUrl = client.genFullUrl(Config.AUTH_URI, null, null);
146+
AuthDTO authDTO = AuthDTO.build(apiConfiguration.getAppKey(), apiConfiguration.getMasterSecret());
147+
String result = client.httpManager.syncHttps(fullUrl, "POST", null, json.toJson(authDTO), client.CONTENT_TYPE);
148+
ApiResult<TokenDTO> apiResult = json.fromJson(result, new TypeReference<ApiResult<TokenDTO>>() {
149+
}.getType());
150+
if (!apiResult.isSuccess()) {
151+
String hideSecret = HIDE_MASTER_SECRET_PATTERN.matcher(apiConfiguration.getMasterSecret()).replaceAll("$1********************$2");
152+
log.error("check app info failed. appId: {}, appKey: {}, masterSecret: {}, result: {}",
153+
apiConfiguration.getAppId(), apiConfiguration.getAppKey(), hideSecret, apiResult);
154+
throw new RuntimeException("check app info failed. please check app info. appId: "
155+
+ apiConfiguration.getAppId() + ", appKey: " + apiConfiguration.getAppKey()
156+
+ ", masterSecret: " + hideSecret);
157+
}
158+
} finally {
159+
if (client != null) {
160+
client.close();
161+
}
162+
}
163+
}
164+
124165
private DefaultApiClient(GtApiConfiguration apiConfiguration, IJson json) {
125166
if (apiConfiguration == null) {
126167
throw new ApiException("apiConfiguration cannot be null.", true);

src/main/java/com/getui/push/v2/sdk/core/factory/GtApiProxyFactory.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,13 @@ public void close() {
121121
cache.remove(this.defaultApiClient);
122122
}
123123

124+
/**
125+
* HTTP请求的参数
126+
*/
124127
public static class ApiParam {
128+
/**
129+
* 基础参数,从方法注解中解析
130+
*/
125131
private final BaseParam baseParam;
126132
/**
127133
* 路径参数

src/main/java/com/getui/push/v2/sdk/dto/req/AudienceDTO.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ public class AudienceDTO {
2121
*/
2222
private boolean isAsync;
2323

24+
/**
25+
* 是否返回别名详情,返回别名详情的前提:is_async=false
26+
*/
27+
private boolean needAliasDetail;
28+
2429
public Audience getAudience() {
2530
return audience;
2631
}
@@ -45,12 +50,21 @@ public void setAsync(boolean async) {
4550
isAsync = async;
4651
}
4752

53+
public boolean isNeedAliasDetail() {
54+
return needAliasDetail;
55+
}
56+
57+
public void setNeedAliasDetail(boolean needAliasDetail) {
58+
this.needAliasDetail = needAliasDetail;
59+
}
60+
4861
@Override
4962
public String toString() {
5063
return "AudienceDTO{" +
5164
"audience=" + audience +
5265
", taskid='" + taskid + '\'' +
5366
", isAsync=" + isAsync +
67+
", needAliasDetail=" + needAliasDetail +
5468
'}';
5569
}
5670
}

0 commit comments

Comments
 (0)