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 {
param.put("nickname", registerClientRequest.getNickname());
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)
.setOriginalRequest(registerClientRequest).build();
ApiResult<ImClient> result = doOperation(request);
ApiResult<ImClient> result = doOperation(request, null);
return result.getData();
}
}
......@@ -3,21 +3,22 @@ package com.wecloud.im.sdk.internal;
import okhttp3.Response;
import java.net.URL;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
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.HttpClient;
import com.wecloud.im.sdk.common.HttpMethod;
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.exception.WecloudException;
import static com.wecloud.im.sdk.utils.HttpHeaders.CONTENT_TYPE;
/**
*
* @Author luozh
......@@ -38,17 +39,13 @@ public abstract class WecloudImOperation {
this.appSecret = appSecret;
}
protected <T> ApiResult<T> doOperation(RequestMessage request) {
// 请求头签名
String signature = RequestParamSigner.sign(request.getClientId(), request.getClientId(), this.appKey,
this.appSecret, request.getPlatform());
request.addHeader(ImHeaders.WECLOUD_SIGN, signature);
return send(request);
protected <T> ApiResult<T> doOperation(RequestMessage request, ResponseParser<T> responseParser) {
ApiResult<T> result = send(request, responseParser);
return result;
}
@SuppressWarnings("unchecked")
private <T> ApiResult<T> send(RequestMessage request) {
private <T> ApiResult<T> send(RequestMessage request, ResponseParser<T> responseParser) {
try {
// 组装请求
Map<String, Object> parameters = BeanUtil.beanToMap(request.getOriginalRequest(), false, true);
......@@ -57,6 +54,14 @@ public abstract class WecloudImOperation {
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());
HttpClient httpClient =
HttpClient.builder().url(endpoint).addHeaders(request.getHeaders()).addParams(request.getParameters()).addParams(finalParameters);
......@@ -73,11 +78,9 @@ public abstract class WecloudImOperation {
}
assert response.body() != null;
String responseBody = response.body().toString();
// 泛型的反序列化
TypeReference typeRef = new TypeReference<ApiResult<T>>() {
};
return (ApiResult<T>) JSON.parseObject(responseBody, typeRef);
String responseBody = response.body().string();
return responseParser.parse(responseBody);
} catch (Exception e) {
throw new WecloudException("发送请求报错: " + e.getMessage());
}
......
......@@ -15,7 +15,7 @@ import com.wecloud.im.sdk.model.WebServiceRequest;
* @Date 2022年04月13日 15:49
* @Version 1.0
*/
public class OSSRequestMessageBuilder {
public class WecloudRequestMessageBuilder {
private String endpoint;
......@@ -31,7 +31,7 @@ public class OSSRequestMessageBuilder {
return endpoint;
}
public OSSRequestMessageBuilder setEndpoint(String endpoint) {
public WecloudRequestMessageBuilder setEndpoint(String endpoint) {
this.endpoint = endpoint;
return this;
}
......@@ -40,7 +40,7 @@ public class OSSRequestMessageBuilder {
return method;
}
public OSSRequestMessageBuilder setMethod(HttpMethod method) {
public WecloudRequestMessageBuilder setMethod(HttpMethod method) {
this.method = method;
return this;
}
......@@ -49,17 +49,17 @@ public class OSSRequestMessageBuilder {
return Collections.unmodifiableMap(headers);
}
public OSSRequestMessageBuilder setHeaders(Map<String, String> headers) {
public WecloudRequestMessageBuilder setHeaders(Map<String, String> headers) {
this.headers = headers;
return this;
}
public OSSRequestMessageBuilder addHeaders(Map<String, String> headers) {
public WecloudRequestMessageBuilder addHeaders(Map<String, String> headers) {
this.headers.putAll(headers);
return this;
}
public OSSRequestMessageBuilder addHeader(String key, String value) {
public WecloudRequestMessageBuilder addHeader(String key, String value) {
headers.put(key, value);
return this;
}
......@@ -68,12 +68,12 @@ public class OSSRequestMessageBuilder {
return Collections.unmodifiableMap(parameters);
}
public OSSRequestMessageBuilder setParameters(Map<String, String> parameters) {
public WecloudRequestMessageBuilder setParameters(Map<String, String> parameters) {
this.parameters = parameters;
return this;
}
public OSSRequestMessageBuilder addParameter(String key, String value) {
public WecloudRequestMessageBuilder addParameter(String key, String value) {
parameters.put(key, value);
return this;
}
......@@ -82,7 +82,7 @@ public class OSSRequestMessageBuilder {
return originalRequest;
}
public OSSRequestMessageBuilder setOriginalRequest(WebServiceRequest originalRequest) {
public WecloudRequestMessageBuilder setOriginalRequest(WebServiceRequest originalRequest) {
this.originalRequest = originalRequest;
return this;
}
......
......@@ -10,15 +10,9 @@ import com.wecloud.im.sdk.common.HttpMethod;
import com.wecloud.im.sdk.common.RequestMessage;
import com.wecloud.im.sdk.common.auth.HmacSHA256Signature;
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.WecloudRequestMessageBuilder;
/**
*
* @Author luozh
* @Date 2022年04月14日 15:37
* @Version 1.0
*/
public class SignTest {
public static void main(String[] args) {
......@@ -29,22 +23,17 @@ public class SignTest {
// 请求头
Map<String, String> headers = new HashMap<>();
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<>();
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)
.setOriginalRequest(null).build();
String canonicalString = SignUtils.buildCanonicalString("POST", resourcePath, request);
String signature = new HmacSHA256Signature().computeSignature("secretAccessKey", canonicalString);
String authorization = SignUtils.composeRequestAuthorization("accessKeyId", signature);
String signature = new HmacSHA256Signature().computeSignature("287d04ds8099fb7de871e9dda845fa8b6b2302faf2ab3737", canonicalString);
String authorization = SignUtils.composeRequestAuthorization("QizKVHcILRWp6Fd3", signature);
System.out.println("canonicalString: " + canonicalString);
System.out.println("signature: " + signature);
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