欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

token

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

第一種方案

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

第二種方案

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

public class TokenInterceptor implements Interceptor {

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

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

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

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

      String newToken = getNewToken();

      UserInfo.getInstance().setPhpSessionId(newToken);
      //使用新的Token,創(chuàng)建新的請(qǐ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() {
    // 通過一個(gè)特定的接口獲取新的token,此處要用到同步的retrofit請(qǐng)求
    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()); //請(qǐng)求過期更換token

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring MVC 攔截器實(shí)現(xiàn)登錄

    Spring MVC 攔截器實(shí)現(xiàn)登錄

    這篇文章主要介紹了Spring MVC 攔截器實(shí)現(xiàn)登錄,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • RabbitMQ的消息確認(rèn)機(jī)制的詳細(xì)總結(jié)

    RabbitMQ的消息確認(rèn)機(jī)制的詳細(xì)總結(jié)

    RabbitMQ消息確認(rèn)機(jī)制指的是在消息傳遞過程中,發(fā)送方發(fā)送消息后,接收方需要對(duì)消息進(jìn)行確認(rèn),以確保消息被正確地接收和處理,本文就講給大家詳解介紹RabbitMQ的幾種消息確認(rèn)機(jī)制,需要的朋友可以參考下
    2023-07-07
  • java 鍵盤輸入一個(gè)數(shù),輸出數(shù)組中指定元素的示例

    java 鍵盤輸入一個(gè)數(shù),輸出數(shù)組中指定元素的示例

    今天小編就為大家分享一篇java 鍵盤輸入一個(gè)數(shù),輸出數(shù)組中指定元素的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 使用Spring Framework 時(shí)常犯的十大錯(cuò)誤(小結(jié))

    使用Spring Framework 時(shí)常犯的十大錯(cuò)誤(小結(jié))

    這篇文章主要介紹了使用Spring Framework 時(shí)常犯的十大錯(cuò)誤(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Jaxb2實(shí)現(xiàn)JavaBean與xml互轉(zhuǎn)的方法詳解

    Jaxb2實(shí)現(xiàn)JavaBean與xml互轉(zhuǎn)的方法詳解

    這篇文章主要介紹了Jaxb2實(shí)現(xiàn)JavaBean與xml互轉(zhuǎn)的方法,簡(jiǎn)單介紹了JAXB的概念、功能及實(shí)現(xiàn)JavaBean與xml互轉(zhuǎn)的具體操作技巧,需要的朋友可以參考下
    2017-04-04
  • java8 stream多字段排序的實(shí)現(xiàn)

    java8 stream多字段排序的實(shí)現(xiàn)

    這篇文章主要介紹了java8 stream多字段排序的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • maven項(xiàng)目引用外部jar包的方法

    maven項(xiàng)目引用外部jar包的方法

    本篇文章主要介紹了maven項(xiàng)目引用外部jar的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • Java中JS引擎實(shí)現(xiàn)的一句話木馬

    Java中JS引擎實(shí)現(xiàn)的一句話木馬

    這篇文章主要為大家介紹了如何利用Java中JS引擎實(shí)現(xiàn)的一句話木馬,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步
    2022-02-02
  • SpringBoot實(shí)現(xiàn)IP地址解析的示例代碼

    SpringBoot實(shí)現(xiàn)IP地址解析的示例代碼

    本篇帶大家實(shí)踐在springboot項(xiàng)目中獲取請(qǐng)求的ip與詳細(xì)地址,我們的很多網(wǎng)站app中都已經(jīng)新增了ip地址顯示,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • 如何將Spring Session存儲(chǔ)到Redis中實(shí)現(xiàn)持久化

    如何將Spring Session存儲(chǔ)到Redis中實(shí)現(xiàn)持久化

    這篇文章主要介紹了如何將Spring Session存儲(chǔ)到Redis中實(shí)現(xiàn)持久化,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07

最新評(píng)論