Commit e08508f7 by 罗长华

优化逻辑

parent 6a1ec9f7
package com.wecloud.im.sdk.internal;
import com.wecloud.im.sdk.common.ApiResult;
/**
*
* @Author luozh
* @Date 2022年04月15日 20:40
* @Version 1.0
*/
public interface ResponseParser<T> {
/**
* Converts the result from stream to a java object.
*
* @param jsonResult
*/
ApiResult<T> parse(String jsonResult);
}
...@@ -43,10 +43,11 @@ public class WecloudImClientOperation extends WecloudImOperation { ...@@ -43,10 +43,11 @@ public class WecloudImClientOperation extends WecloudImOperation {
param.put("nickname", registerClientRequest.getNickname()); param.put("nickname", registerClientRequest.getNickname());
param.put("deviceType", registerClientRequest.getDeviceType() + ""); param.put("deviceType", registerClientRequest.getDeviceType() + "");
// 发送请求 // 发送请求
RequestMessage request = new OSSRequestMessageBuilder().setEndpoint("/api/imClient/registerClient") RequestMessage request = new WecloudRequestMessageBuilder().setEndpoint("/api/imClient/registerClient")
.setMethod(HttpMethod.POST).setParameters(param) .setMethod(HttpMethod.POST).setParameters(param)
.setOriginalRequest(registerClientRequest).build(); .setOriginalRequest(registerClientRequest).build();
ApiResult<ImClient> result = doOperation(request); ApiResult<ImClient> result = doOperation(request, null);
return result.getData(); return result.getData();
} }
} }
...@@ -3,21 +3,22 @@ package com.wecloud.im.sdk.internal; ...@@ -3,21 +3,22 @@ package com.wecloud.im.sdk.internal;
import okhttp3.Response; import okhttp3.Response;
import java.net.URL; import java.net.URL;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.wecloud.im.sdk.common.ApiResult; import com.wecloud.im.sdk.common.ApiResult;
import com.wecloud.im.sdk.common.HttpClient; import com.wecloud.im.sdk.common.HttpClient;
import com.wecloud.im.sdk.common.HttpMethod; import com.wecloud.im.sdk.common.HttpMethod;
import com.wecloud.im.sdk.common.RequestMessage; import com.wecloud.im.sdk.common.RequestMessage;
import com.wecloud.im.sdk.common.RequestParamSigner;
import com.wecloud.im.sdk.common.auth.Credentials; import com.wecloud.im.sdk.common.auth.Credentials;
import com.wecloud.im.sdk.exception.WecloudException; import com.wecloud.im.sdk.exception.WecloudException;
import static com.wecloud.im.sdk.utils.HttpHeaders.CONTENT_TYPE;
/** /**
* *
* @Author luozh * @Author luozh
...@@ -38,17 +39,13 @@ public abstract class WecloudImOperation { ...@@ -38,17 +39,13 @@ public abstract class WecloudImOperation {
this.appSecret = appSecret; this.appSecret = appSecret;
} }
protected <T> ApiResult<T> doOperation(RequestMessage request) { protected <T> ApiResult<T> doOperation(RequestMessage request, ResponseParser<T> responseParser) {
// 请求头签名 ApiResult<T> result = send(request, responseParser);
String signature = RequestParamSigner.sign(request.getClientId(), request.getClientId(), this.appKey, return result;
this.appSecret, request.getPlatform());
request.addHeader(ImHeaders.WECLOUD_SIGN, signature);
return send(request);
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private <T> ApiResult<T> send(RequestMessage request) { private <T> ApiResult<T> send(RequestMessage request, ResponseParser<T> responseParser) {
try { try {
// 组装请求 // 组装请求
Map<String, Object> parameters = BeanUtil.beanToMap(request.getOriginalRequest(), false, true); Map<String, Object> parameters = BeanUtil.beanToMap(request.getOriginalRequest(), false, true);
...@@ -57,6 +54,14 @@ public abstract class WecloudImOperation { ...@@ -57,6 +54,14 @@ public abstract class WecloudImOperation {
finalParameters.put(k, v.toString()); finalParameters.put(k, v.toString());
}); });
Credentials credentials = new Credentials(appKey, appSecret);
// 请求日期
String date = DateUtil.formatHttpDate(new Date());
request.addHeader(ImHeaders.DATE, date);
request.addHeader(CONTENT_TYPE, "application/json; charset=utf-8");
// 添加签名请求头
RequestSigner signer = new RequestSigner(request.getMethod().name(), request.getEndpoint(), credentials);
signer.sign(request);
URL endpoint = new URL(apiDomain, request.getEndpoint()); URL endpoint = new URL(apiDomain, request.getEndpoint());
HttpClient httpClient = HttpClient httpClient =
HttpClient.builder().url(endpoint).addHeaders(request.getHeaders()).addParams(request.getParameters()).addParams(finalParameters); HttpClient.builder().url(endpoint).addHeaders(request.getHeaders()).addParams(request.getParameters()).addParams(finalParameters);
...@@ -73,11 +78,9 @@ public abstract class WecloudImOperation { ...@@ -73,11 +78,9 @@ public abstract class WecloudImOperation {
} }
assert response.body() != null; assert response.body() != null;
String responseBody = response.body().toString(); String responseBody = response.body().string();
// 泛型的反序列化 return responseParser.parse(responseBody);
TypeReference typeRef = new TypeReference<ApiResult<T>>() {
};
return (ApiResult<T>) JSON.parseObject(responseBody, typeRef);
} catch (Exception e) { } catch (Exception e) {
throw new WecloudException("发送请求报错: " + e.getMessage()); throw new WecloudException("发送请求报错: " + e.getMessage());
} }
......
...@@ -15,7 +15,7 @@ import com.wecloud.im.sdk.model.WebServiceRequest; ...@@ -15,7 +15,7 @@ import com.wecloud.im.sdk.model.WebServiceRequest;
* @Date 2022年04月13日 15:49 * @Date 2022年04月13日 15:49
* @Version 1.0 * @Version 1.0
*/ */
public class OSSRequestMessageBuilder { public class WecloudRequestMessageBuilder {
private String endpoint; private String endpoint;
...@@ -31,7 +31,7 @@ public class OSSRequestMessageBuilder { ...@@ -31,7 +31,7 @@ public class OSSRequestMessageBuilder {
return endpoint; return endpoint;
} }
public OSSRequestMessageBuilder setEndpoint(String endpoint) { public WecloudRequestMessageBuilder setEndpoint(String endpoint) {
this.endpoint = endpoint; this.endpoint = endpoint;
return this; return this;
} }
...@@ -40,7 +40,7 @@ public class OSSRequestMessageBuilder { ...@@ -40,7 +40,7 @@ public class OSSRequestMessageBuilder {
return method; return method;
} }
public OSSRequestMessageBuilder setMethod(HttpMethod method) { public WecloudRequestMessageBuilder setMethod(HttpMethod method) {
this.method = method; this.method = method;
return this; return this;
} }
...@@ -49,17 +49,17 @@ public class OSSRequestMessageBuilder { ...@@ -49,17 +49,17 @@ public class OSSRequestMessageBuilder {
return Collections.unmodifiableMap(headers); return Collections.unmodifiableMap(headers);
} }
public OSSRequestMessageBuilder setHeaders(Map<String, String> headers) { public WecloudRequestMessageBuilder setHeaders(Map<String, String> headers) {
this.headers = headers; this.headers = headers;
return this; return this;
} }
public OSSRequestMessageBuilder addHeaders(Map<String, String> headers) { public WecloudRequestMessageBuilder addHeaders(Map<String, String> headers) {
this.headers.putAll(headers); this.headers.putAll(headers);
return this; return this;
} }
public OSSRequestMessageBuilder addHeader(String key, String value) { public WecloudRequestMessageBuilder addHeader(String key, String value) {
headers.put(key, value); headers.put(key, value);
return this; return this;
} }
...@@ -68,12 +68,12 @@ public class OSSRequestMessageBuilder { ...@@ -68,12 +68,12 @@ public class OSSRequestMessageBuilder {
return Collections.unmodifiableMap(parameters); return Collections.unmodifiableMap(parameters);
} }
public OSSRequestMessageBuilder setParameters(Map<String, String> parameters) { public WecloudRequestMessageBuilder setParameters(Map<String, String> parameters) {
this.parameters = parameters; this.parameters = parameters;
return this; return this;
} }
public OSSRequestMessageBuilder addParameter(String key, String value) { public WecloudRequestMessageBuilder addParameter(String key, String value) {
parameters.put(key, value); parameters.put(key, value);
return this; return this;
} }
...@@ -82,7 +82,7 @@ public class OSSRequestMessageBuilder { ...@@ -82,7 +82,7 @@ public class OSSRequestMessageBuilder {
return originalRequest; return originalRequest;
} }
public OSSRequestMessageBuilder setOriginalRequest(WebServiceRequest originalRequest) { public WecloudRequestMessageBuilder setOriginalRequest(WebServiceRequest originalRequest) {
this.originalRequest = originalRequest; this.originalRequest = originalRequest;
return this; return this;
} }
......
...@@ -10,15 +10,9 @@ import com.wecloud.im.sdk.common.HttpMethod; ...@@ -10,15 +10,9 @@ import com.wecloud.im.sdk.common.HttpMethod;
import com.wecloud.im.sdk.common.RequestMessage; import com.wecloud.im.sdk.common.RequestMessage;
import com.wecloud.im.sdk.common.auth.HmacSHA256Signature; import com.wecloud.im.sdk.common.auth.HmacSHA256Signature;
import com.wecloud.im.sdk.internal.ImHeaders; import com.wecloud.im.sdk.internal.ImHeaders;
import com.wecloud.im.sdk.internal.OSSRequestMessageBuilder;
import com.wecloud.im.sdk.internal.SignUtils; import com.wecloud.im.sdk.internal.SignUtils;
import com.wecloud.im.sdk.internal.WecloudRequestMessageBuilder;
/**
*
* @Author luozh
* @Date 2022年04月14日 15:37
* @Version 1.0
*/
public class SignTest { public class SignTest {
public static void main(String[] args) { public static void main(String[] args) {
...@@ -29,22 +23,17 @@ public class SignTest { ...@@ -29,22 +23,17 @@ public class SignTest {
// 请求头 // 请求头
Map<String, String> headers = new HashMap<>(); Map<String, String> headers = new HashMap<>();
headers.put(ImHeaders.DATE, date); headers.put(ImHeaders.DATE, date);
headers.put(ImHeaders.CONTENT_TYPE, "application/json"); headers.put(ImHeaders.CONTENT_TYPE, "application/json; charset=utf-8");
// 请求参数 // 请求参数
Map<String, String> param = new HashMap<>(); Map<String, String> param = new HashMap<>();
param.put("appKey", "appKey");
param.put("userId", "1111222333");
param.put("headPortrait", "");
param.put("nickname", "罗罗啦");
param.put("deviceType", "1");
// 发送请求 // 发送请求
RequestMessage request = new OSSRequestMessageBuilder().setEndpoint("/api/imClient/registerClient") RequestMessage request = new WecloudRequestMessageBuilder().setEndpoint("/api/imClient/registerClient")
.setMethod(HttpMethod.POST).setParameters(param).addHeaders(headers) .setMethod(HttpMethod.POST).setParameters(param).addHeaders(headers)
.setOriginalRequest(null).build(); .setOriginalRequest(null).build();
String canonicalString = SignUtils.buildCanonicalString("POST", resourcePath, request); String canonicalString = SignUtils.buildCanonicalString("POST", resourcePath, request);
String signature = new HmacSHA256Signature().computeSignature("secretAccessKey", canonicalString); String signature = new HmacSHA256Signature().computeSignature("287d04ds8099fb7de871e9dda845fa8b6b2302faf2ab3737", canonicalString);
String authorization = SignUtils.composeRequestAuthorization("accessKeyId", signature); String authorization = SignUtils.composeRequestAuthorization("QizKVHcILRWp6Fd3", signature);
System.out.println("canonicalString: " + canonicalString); System.out.println("canonicalString: " + canonicalString);
System.out.println("signature: " + signature); System.out.println("signature: " + signature);
System.out.println("Authorization header: " + authorization); System.out.println("Authorization header: " + authorization);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment