|
@@ -1,6 +1,7 @@
|
|
|
package com.qmth.boot.core.retrofit.interceptor;
|
|
|
|
|
|
import com.qmth.boot.core.retrofit.interfaces.SignatureProvider;
|
|
|
+import com.qmth.boot.core.retrofit.utils.SignatureInfo;
|
|
|
import com.qmth.boot.tools.signature.SignatureEntity;
|
|
|
import okhttp3.Interceptor;
|
|
|
import okhttp3.Request;
|
|
@@ -26,13 +27,30 @@ public class SignatureInterceptor implements Interceptor {
|
|
|
@Override
|
|
|
public Response intercept(Chain chain) throws IOException {
|
|
|
Request request = chain.request();
|
|
|
- long time = System.currentTimeMillis();
|
|
|
- String signature = SignatureEntity
|
|
|
- .build(provider.getType(), request.method(), request.url().uri().getPath(), time,
|
|
|
- provider.getIdentity(), provider.getSecret());
|
|
|
- return chain.proceed(request.newBuilder().removeHeader(HEADER_KEY_TIME).removeHeader(HEADER_KEY_AUTHORIZATION)
|
|
|
- .addHeader(HEADER_KEY_TIME, String.valueOf(time)).addHeader(HEADER_KEY_AUTHORIZATION, signature)
|
|
|
- .build());
|
|
|
+ SignatureProvider provider = this.provider;
|
|
|
+ if (provider == null) {
|
|
|
+ provider = getSignatureInfo(request);
|
|
|
+ }
|
|
|
+ if (provider != null) {
|
|
|
+ long time = System.currentTimeMillis();
|
|
|
+ String signature = SignatureEntity
|
|
|
+ .build(provider.getType(), request.method(), request.url().uri().getPath(), time,
|
|
|
+ provider.getIdentity(), provider.getSecret());
|
|
|
+ return chain.proceed(
|
|
|
+ request.newBuilder().removeHeader(SignatureInfo.HEADER_NAME).removeHeader(HEADER_KEY_TIME)
|
|
|
+ .removeHeader(HEADER_KEY_AUTHORIZATION).addHeader(HEADER_KEY_TIME, String.valueOf(time))
|
|
|
+ .addHeader(HEADER_KEY_AUTHORIZATION, signature).build());
|
|
|
+ } else {
|
|
|
+ return chain.proceed(request);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private SignatureInfo getSignatureInfo(Request request) {
|
|
|
+ try {
|
|
|
+ return SignatureInfo.parse(request.header(SignatureInfo.HEADER_NAME));
|
|
|
+ } catch (Exception e) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
}
|