浏览代码

修改core-retrofit,支持将签名信息以方法参数形式动态提供,去掉之前临时通过header交换的方法;签名信息提供两个类型的快速创建方法

Signed-off-by: luoshi <luoshi@qmth.com.cn>
luoshi 2 年之前
父节点
当前提交
fcda8489bb

+ 5 - 5
core-retrofit/src/main/java/com/qmth/boot/core/retrofit/interceptor/SignatureInterceptor.java

@@ -27,9 +27,9 @@ public class SignatureInterceptor implements Interceptor {
     @Override
     public Response intercept(Chain chain) throws IOException {
         Request request = chain.request();
-        SignatureProvider provider = this.provider;
+        SignatureProvider provider = getSignatureInfo(request);
         if (provider == null) {
-            provider = getSignatureInfo(request);
+            provider = this.provider;
         }
         if (provider != null) {
             long time = System.currentTimeMillis();
@@ -37,8 +37,8 @@ public class SignatureInterceptor implements Interceptor {
                     .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))
+                    request.newBuilder().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);
@@ -47,7 +47,7 @@ public class SignatureInterceptor implements Interceptor {
 
     private SignatureInfo getSignatureInfo(Request request) {
         try {
-            return SignatureInfo.parse(request.header(SignatureInfo.HEADER_NAME));
+            return request.tag(SignatureInfo.class);
         } catch (Exception e) {
             return null;
         }

+ 18 - 16
core-retrofit/src/main/java/com/qmth/boot/core/retrofit/utils/SignatureInfo.java

@@ -2,17 +2,12 @@ package com.qmth.boot.core.retrofit.utils;
 
 import com.qmth.boot.core.retrofit.interfaces.SignatureProvider;
 import com.qmth.boot.tools.signature.SignatureType;
-import org.apache.commons.lang3.StringUtils;
 
 /**
  * 调用方动态提供的签名信息,替代容器管理的静态配置
  */
 public class SignatureInfo implements SignatureProvider {
 
-    public static final String HEADER_NAME = "signature-info";
-
-    private static final String JOINER = "\t";
-
     private SignatureType type;
 
     private String identity;
@@ -40,18 +35,25 @@ public class SignatureInfo implements SignatureProvider {
         return secret;
     }
 
-    @Override
-    public String toString() {
-        return type.getName() + JOINER + identity + JOINER + secret;
+    /**
+     * 按照密钥类型创建签名
+     *
+     * @param accessKey
+     * @param accessSecret
+     * @return
+     */
+    public static SignatureInfo secretInfo(String accessKey, String accessSecret) {
+        return new SignatureInfo(SignatureType.SECRET, accessKey, accessSecret);
     }
 
-    public static SignatureInfo parse(String value) {
-        String[] values = StringUtils.split(StringUtils.trimToEmpty(value), JOINER);
-        if (values.length == 3) {
-            return new SignatureInfo(SignatureType.findByName(values[0]), values[1], values[2]);
-        } else {
-            return null;
-        }
+    /**
+     * 按照令牌类型创建签名
+     *
+     * @param session
+     * @param token
+     * @return
+     */
+    public static SignatureInfo tokenInfo(String session, String token) {
+        return new SignatureInfo(SignatureType.TOKEN, session, token);
     }
-
 }