最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android token過期刷新處理的方法示例

 更新時間:2018年10月23日 11:26:06   作者:時間在走  
這篇文章主要介紹了Android token過期刷新處理的方法示例,本文詳細的介紹了2種方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

token

token的意思是“令牌”,是用戶身份的驗證方式,最簡單的token組成:uid(用戶唯一的身份標識)、time(當前時間的時間戳)、sign(簽名,由token的前幾位+鹽以哈希算法壓縮成一定長的十六進制字符串,可以防止惡意第三方拼接token請求服務器)。還可以把不變的參數(shù)也放進token,避免多次查庫。

第一種方案

通過okhttp提供的Authenticator接口,但是只有HTTP返回碼為401時才會觸發(fā)。此種方式局限性很大,要求后臺設計必須符合規(guī)范。在實際項目中不可能完美實現(xiàn)。此種方式不做詳解,百度很多。

第二種方案

根據(jù)和后端協(xié)商好的返回碼處理刷新token步驟。代碼如下;

public class TokenInterceptor implements Interceptor {

  @Override
  public Response intercept(Chain chain) throws IOException {

    Request.Builder request = chain.request().newBuilder();
    //添加默認的Token請求頭
    request.addHeader("Cookie", UserInfo.getInstance().getPhpSessionId());

    Response proceed = chain.proceed(request.build());
    okhttp3.MediaType mediaType = proceed.body().contentType();

    //如果token過期 再去重新請求token 然后設置token的請求頭 重新發(fā)起請求 用戶無感
    String content = proceed.body().string();
    if (isTokenExpired(content)) {

      String newToken = getNewToken();

      UserInfo.getInstance().setPhpSessionId(newToken);
      //使用新的Token,創(chuàng)建新的請求
      Request newRequest = chain.request().newBuilder()
          .addHeader("Cookie", newToken)
          .build();
      return chain.proceed(newRequest);
    }
    return proceed.newBuilder()
        .body(okhttp3.ResponseBody.create(mediaType, content))
        .build();

  }

  private String getNewToken() {
    // 通過一個特定的接口獲取新的token,此處要用到同步的retrofit請求
    IndexService service = IndexService.Builder.getServer();
    Call<BaseObjResult<UserBean>> call = service.getToke(
        UserInfo.getInstance().getPhone(),
        UserInfo.getInstance().getPwd(),
        0);

    //要用retrofit的同步方式
    BaseObjResult<UserBean> newToken = null;
    try {
      newToken = call.execute().body();
    } catch (IOException e) {
      e.printStackTrace();
    }

    return newToken.getResult().getPHPSESSID();
  }

  /**
   * 根據(jù)Response,判斷Token是否失效
   *
   * @return
   */
  private boolean isTokenExpired(String resultStr) {
    RequestCode requestCode = new Gson().fromJson(resultStr, RequestCode.class);
    //err==3 token過期
    if (requestCode.getErr() == 3) {
      LogUtils.e("Token登錄過期了");
      ToastUtils.showShortSafe("Token登錄過期了");
      return true;
    }

    return false;
  }

  class RequestCode {
    private int err;
    private String msg;

    public int getErr() {
      return err;
    }

    public void setErr(int err) {
      this.err = err;
    }

    public String getMsg() {
      return msg;
    }

    public void setMsg(String msg) {
      this.msg = msg;
    }
  }

}

使用方式

okBuilder.addInterceptor(new TokenInterceptor()); //請求過期更換token

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • elasticsearch集群cluster主要功能詳細分析

    elasticsearch集群cluster主要功能詳細分析

    這篇文章主要為大家介紹了elasticsearch集群cluster主要功能詳細分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-04-04
  • Java Servlet請求重定向的方法

    Java Servlet請求重定向的方法

    這篇文章主要介紹了使用Java Servlet請求重定向的方法,幫助大家更好的理解和學習Java Servlet的相關知識,感興趣的朋友可以了解下
    2020-11-11
  • springboot的jar包如何啟用外部配置文件

    springboot的jar包如何啟用外部配置文件

    本文主要介紹了springboot的jar包如何啟用外部配置文件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • springboot讀取resources下文件的方式詳解

    springboot讀取resources下文件的方式詳解

    最近寫讀取模板文件做一些后續(xù)的處理,將文件放在了項目的resources下,發(fā)現(xiàn)了一個好用的讀取方法,下面這篇文章主要給大家介紹了關于springboot讀取resources下文件的相關資料,需要的朋友可以參考下
    2022-06-06
  • java如何確定一個鏈表有環(huán)及入口節(jié)點

    java如何確定一個鏈表有環(huán)及入口節(jié)點

    這篇文章主要介紹了java如何確定一個鏈表有環(huán)及入口節(jié)點,想了解數(shù)據(jù)結構的同學可以參考下
    2021-04-04
  • 一文搞懂Java?JDBC中的SQL注入問題

    一文搞懂Java?JDBC中的SQL注入問題

    在用戶輸入的數(shù)據(jù)中有SQL關鍵字或語法,并且關鍵字或語法參與了SQL語句的編譯,導致SQL語句編譯后的條件為true,一直得到正確的結果,這種現(xiàn)象就是SQL注入,這篇文章主要介紹了一文搞懂Java?JDBC中的SQL注入問題,需要的朋友可以參考下
    2022-10-10
  • Java多線程wait()和notify()方法詳細圖解

    Java多線程wait()和notify()方法詳細圖解

    wait()和notify()是直接隸屬于Object類,也就是說所有對象都擁有這一對方法,下面這篇文章主要給大家介紹了關于Java多線程wait()和notify()方法詳細圖解的相關資料,需要的朋友可以參考下
    2022-10-10
  • java 二維數(shù)組矩陣乘法的實現(xiàn)方法

    java 二維數(shù)組矩陣乘法的實現(xiàn)方法

    java 二維數(shù)組矩陣乘法的實現(xiàn)方法,需要的朋友可以參考一下
    2013-03-03
  • 基于java集合中的一些易混淆的知識點(詳解)

    基于java集合中的一些易混淆的知識點(詳解)

    下面小編就為大家?guī)硪黄趈ava集合中的一些易混淆的知識點(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • Fluent Mybatis零xml配置實現(xiàn)復雜嵌套查詢

    Fluent Mybatis零xml配置實現(xiàn)復雜嵌套查詢

    本文主要介紹了Fluent Mybatis零xml配置實現(xiàn)復雜嵌套查詢,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評論

桐柏县| 宜昌市| 砀山县| 宁波市| 韶山市| 壤塘县| 桃园县| 双桥区| 大同县| 定陶县| 淮滨县| 美姑县| 香港| 新乐市| 泾阳县| 同德县| 屏南县| 大渡口区| 永福县| 西城区| 陇川县| 北流市| 卢氏县| 建阳市| 兴安县| 昌都县| 虹口区| 丰城市| 常熟市| 黎川县| 东莞市| 托里县| 溆浦县| 洞头县| 富蕴县| 信阳市| 上思县| 灯塔市| 济阳县| 江西省| 万山特区|