日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

進階指南

本文對移動網關 RPC 攔截器、RPC 請求頭、RPC Cookie、RPC 簽名的設置進行說明。

重要

在 10.2.3 基線中新增設置 RPC 簽名內容。

RPC 攔截

在業務開發中,如果在某些情況下需要控制客戶端的網絡請求(例如攔截網絡請求,禁止訪問某些接口,或者限流),可以通過 RPC 攔截器實現。

創建全局攔截器

public class CommonInterceptor implements RpcInterceptor {

    /**
    * 前置攔截:發送 RPC 之前回調。
    * @param proxy  RPC 代理對象。
    * @param clazz  rpcface 模型類,通過 clazz 參數可以判斷當前調用的是哪個 RPC 模型類
    * @param method 當前 RPC 調用的方法。
    * @throws RpcException
    * @return true 表示繼續向下執行,false 表示中斷當前請求,拋出 RpcException,錯誤碼:9。
    */
    @Override
    public boolean preHandle(Object proxy, 
                                ThreadLocal<Object> retValue, 
                                byte[] retRawValue, 
                                Class<?> clazz,
                                Method method, 
                                Object[] args, 
                                Annotation annotation, 
                                ThreadLocal<Map<String, Object>> extParams)
                                throws RpcException {
            //Do something... 
            return true;
     }

    /**后置攔截:發起 RPC 成功之后回調。
    *@return true 表示繼續向下執行,false 表示中斷當前請求,拋出 RpcException,錯誤碼:9。
    */
    @Override
   public boolean postHandle(Object proxy, 
                            ThreadLocal<Object> retValue, 
                            byte[] retRawValue, 
                            Class<?> clazz,
                            Method method, 
                            Object[] args, 
                            Annotation annotation) throws RpcException {
          //Do something...
          return true;
   }

   /**
   * 異常攔截:發起 RPC 失敗之后回調。
   * @param exception 表示當前 RPC 出錯異常。
   * @return true 表示將當前異常繼續向上拋出,false 表示不要拋出異常,正常返回,沒有特殊需求,切勿返回 false。
   */
   @Override
    public boolean exceptionHandle(Object proxy, 
                                ThreadLocal<Object> retValue, 
                                byte[] retRawValue, 
                                Class<?> clazz,
                                Method method, 
                                Object[] args, 
                                RpcException exception,
                                Annotation annotation) throws RpcException {

        //Do something...
        return true;
    }
}

注冊攔截器

在框架啟動過程中,初始化 RpcService 時,將攔截器注冊上去,例如:

public class MockLauncherApplicationAgent extends LauncherApplicationAgent {

    public MockLauncherApplicationAgent(Application context, Object bundleContext) {
        super(context, bundleContext);
    }

    @Override
    public void preInit() {
        super.preInit();
    }

    @Override
    public void postInit() {
        super.postInit();
        RpcService rpcService = getMicroApplicationContext().findServiceByInterface(RpcService.class.getName());
        rpcService.addRpcInterceptor(OperationType.class, new CommonInterceptor());
    }
}

設置 RPC 請求頭

MainActivity 類的 initRpcConfig 方法中,設置 RPC 請求頭。具體參考 代碼示例。

private void initRpcConfig(RpcService rpcService) {
        //設置請求頭
        Map<String, String> headerMap = new HashMap<>();
        headerMap.put("key1", "val1");
        headerMap.put("key2", "val2");
        rpcInvokeContext.setRequestHeaders(headerMap);
    }

設置 RPC cookie

設置 cookie

通過調用以下接口來進行 RPC cookie 設置。其中,Your domain 的規則是網關 URL 的第一個 . 以及其后第一個 / 之前的所有內容。例如,網關 URL 為 http://test-cn-hangzhou-mgs-gw.cloud.alipay.com/mgw.htm,那么 Your domain 則是 .cloud.alipay.com。

GwCookieCacheHelper.setCookies(Your domain, cookiesMap);

移除 cookie

通過調用以下接口即可移除設置的 cookie。

GwCookieCacheHelper.removeAllCookie();

設置 SM3 驗簽

在 RPC 初始化之后,可以通過MPRpc 類的 setGlobalSignType 方法,來指定全局驗簽方式為 sm3 類型。

MPRpc.setGlobalSignType(TransportConstants.SIGN_TYPE_SM3);

設置 RPC 簽名

接口

class TransportConstants {
    public static final int SIGN_TYPE_DEFAULT = 0; // 默認簽名方式,即 md5
    public static final int SIGN_TYPE_MD5 = 1; // md5
    public static final int SIGN_TYPE_HMACSHA256 = 3; // hmacsha256
    public static final int SIGN_TYPE_SHA256 = 4; // sha256
    public static final int SIGN_TYPE_SM3 = 5; // sm3
}

// 全局 rpc 簽名算法設置
MPRpc.setGlobalSignType(int signType);

示例

設置全局 RPC signType,且對所有 RPC 生效。

// 設置簽名方式為SM3
MPRpc.setGlobalSignType(TransportConstants.SIGN_TYPE_SM3);