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

基于springboot+jwt實現(xiàn)刷新token過程解析

 更新時間:2020年03月27日 09:09:12   作者:一步一高  
這篇文章主要介紹了基于springboot+jwt實現(xiàn)刷新token過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

前一段時間講過了springboot+jwt的整合,但是因為一些原因(個人比較懶)并沒有更新關(guān)于token的刷新問題,今天跟別人閑聊,聊到了關(guān)于業(yè)務(wù)中token的刷新方式,所以在這里我把我知道的一些點記錄一下,也希望能幫到一些有需要的朋友,同時也希望給我一些建議,話不多說,上代碼!

1:這種方式為在線刷新,比方說設(shè)定的token有效期為30min,那么每次訪問資源時,都會在攔截器中去判斷一下token是否過期,如果沒有過期就刷新token的時間為30min,反之則會重新登錄,需要注意的是這種方式我是在登錄以后就將token存在了redis

//登錄方法中將token存在redis
    String token = JwtUtil.sign(userName,user.getId());
    redisUtil.set(UserConstants.PREFIX_USER_TOKEN + token, token,UserConstants.TOKEN_EXPIRE_TIME);
    Map map=new HashMap();
    map.put("token", token);
    return Result.success(map);
    //在攔截器中獲取token,并判斷token的有效期
    String token = req.getHeader(UserConstants.ACCESS_TOKEN);
    if (Strings.isNullOrEmpty(token)) {
      return false;
    }
    Object reqToken=redisUtil.get(UserConstants.PREFIX_USER_TOKEN+token);
    if (ObjectUtils.isEmpty(reqToken)) {
      return false;
    }
    if(redisUtil.getExpire(UserConstants.PREFIX_USER_TOKEN+token) <1){
      return false;
    }
    redisUtil.set(UserConstants.PREFIX_USER_TOKEN + token, token,UserConstants.TOKEN_EXPIRE_TIME);
    return true;

2.這種方式為免密登錄,也就是說,登錄一次后就不用再通過賬號密碼登錄,思路就是在生成token時候,在生成一個refToken來刷新,比如說我的token設(shè)置的有效期為5分鐘,refToken設(shè)置的為一周,那么在請求時候則判斷token是否過期,如果已經(jīng)過期 就判斷refToken的時間有沒有過期,沒有過期則生成一個新的token給前端,同時重置這個refToken(看你自己),如果refToken已經(jīng)過期則重新登錄,需要注意的是這次生成的token并不存在redis中,而是將refToken存在redis。

// 生成token
    String token = JwtUtil.sign(userName,user.getId());
    //刷新token,免密登陸
    String refToken=UUID.randomUUID().toString().replaceAll("-","");
    redisUtil.set(UserConstants.PREFIX_USER_TOKEN + token, refToken,UserConstants.TOKEN_EXPIRE_TIME);
    Map map=new HashMap();
    map.put("token", token);
    map.put("refToken", refToken);
    return Result.success(map);

    //這里在攔截其中校驗token,如果校驗失敗,則判斷redis的refToken是否過期
    if (!JwtUtil.verify(token)) {
      if(redisUtil.getExpire(UserConstants.PREFIX_USER_TOKEN+token)>=1){
        HttpServletResponse httpServletResponse = (HttpServletResponse) response;
        String newRefToken=UUID.randomUUID().toString().replaceAll("-","");
        Integer userId=Integer.parseInt(JwtUtil.getUserId(token));
        User user=userService.selectOne(userId);
        String newToken=JwtUtil.sign(user.getUserName(),user.getId());
        httpServletResponse.setHeader("newToken",newToken);
        httpServletResponse.setHeader("newRefToken",newRefToken);
        return true;
      }else{
        return false;
      }
    }

3.貼一下我在postMan中的測試結(jié)果:

這里是登錄后返回的token和refToken:

這里是登陸成功之后的顯示:

這里是token過期后,refToken刷新的token:

這里是設(shè)定的refToken過期后在訪問的顯示:

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

相關(guān)文章

  • Maven項目引用第三方j(luò)ar包找不到類ClassNotFoundException

    Maven項目引用第三方j(luò)ar包找不到類ClassNotFoundException

    這篇文章主要為大家介紹了Maven項目引用第三方j(luò)ar包找不到類ClassNotFoundException解決及原因分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • Cookie在Java中的使用

    Cookie在Java中的使用

    Cookie又稱“小甜餅”,類型為“小型文本文件”,指某些網(wǎng)站為了辨別用戶身份而儲存在用戶本地終端(Client Side)上的數(shù)據(jù)(通常經(jīng)過加密)。由用戶客戶端計算機暫時或永久保存的信息。本文將講解Cookie在Java中的使用,感興趣的朋友可以了解下
    2021-05-05
  • SpringCloud中的Seata基本介紹與安裝教程

    SpringCloud中的Seata基本介紹與安裝教程

    Seata 是一款開源的分布式事務(wù)解決方案,致力于提供高性能和簡單易用的分布式事務(wù)服務(wù),這篇文章主要介紹了SpringCloud之Seata基本介紹與安裝,需要的朋友可以參考下
    2024-01-01
  • Java中的ArrayList類常用方法和遍歷

    Java中的ArrayList類常用方法和遍歷

    這篇文章主要介紹了Java中的ArrayList類常用方法和遍歷,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 23種設(shè)計模式(3) java原型模式

    23種設(shè)計模式(3) java原型模式

    這篇文章主要為大家詳細介紹了23種設(shè)計模式之java原型模式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • java中的轉(zhuǎn)義字符介紹

    java中的轉(zhuǎn)義字符介紹

    普通的轉(zhuǎn)義字符序列和八進制轉(zhuǎn)義字符都比Unicode轉(zhuǎn)義字符要好得多,因為與Unicode轉(zhuǎn)義字符不同,轉(zhuǎn)義字符序列是在程序被解析為各種符號之后被處理的
    2013-09-09
  • mybatis中查詢結(jié)果為空時不同返回類型對應(yīng)返回值問題

    mybatis中查詢結(jié)果為空時不同返回類型對應(yīng)返回值問題

    這篇文章主要介紹了mybatis中查詢結(jié)果為空時不同返回類型對應(yīng)返回值問題,本文分幾種方法給大家介紹的非常詳細,需要的朋友可以參考下
    2019-10-10
  • Java上傳視頻實例代碼

    Java上傳視頻實例代碼

    本文通過實例代碼給大家講解了java上傳視頻功能,代碼分為頁面前臺和后臺,工具類,具體實例代碼大家通過本文學(xué)習(xí)吧
    2018-01-01
  • 一文秒懂idea的git插件跟翻譯插件

    一文秒懂idea的git插件跟翻譯插件

    idea之類的開發(fā)軟件真的超級多的插件,今天給大家分享idea的git插件跟翻譯插件,感興趣的朋友跟隨小編一起看看吧
    2021-04-04
  • java中實現(xiàn)對象排序的兩種方法(Comparable,Comparator)

    java中實現(xiàn)對象排序的兩種方法(Comparable,Comparator)

    這篇文章主要給大家介紹了關(guān)于java中實現(xiàn)對象排序的兩種方法,一種是實現(xiàn)Comparable進行排序,另一種是實現(xiàn)Comparator進行排序,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-12-12

最新評論