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

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

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

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

1:這種方式為在線刷新,比方說設定的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設置的有效期為5分鐘,refToken設置的為一周,那么在請求時候則判斷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:

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

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

相關(guān)文章

  • Spring AOP使用@Aspect注解 面向切面實現(xiàn)日志橫切的操作

    Spring AOP使用@Aspect注解 面向切面實現(xiàn)日志橫切的操作

    這篇文章主要介紹了Spring AOP使用@Aspect注解 面向切面實現(xiàn)日志橫切的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java樹形結(jié)構(gòu)數(shù)據(jù)生成導出excel文件方法記錄

    Java樹形結(jié)構(gòu)數(shù)據(jù)生成導出excel文件方法記錄

    最近好像得罪了poi,遇到的都是導出word、Excel、pdf的問題,下面這篇文章主要給大家介紹了關(guān)于Java樹形結(jié)構(gòu)數(shù)據(jù)生成導出excel文件的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-10-10
  • Java實現(xiàn)上傳和下載功能(支持多個文件同時上傳)

    Java實現(xiàn)上傳和下載功能(支持多個文件同時上傳)

    這篇文章主要介紹了Java實現(xiàn)上傳和下載功能,支持多個文件同時上傳,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • SpringBoot集成netty實現(xiàn)websocket通信功能

    SpringBoot集成netty實現(xiàn)websocket通信功能

    Netty是一個高性能、異步事件驅(qū)動的網(wǎng)絡應用框架,用于快速開發(fā)可維護的高性能協(xié)議服務器和客戶端,WebSocket 是一種網(wǎng)絡通信協(xié)議,相比傳統(tǒng)的HTTP協(xié)議,本文給大家介紹了SpringBoot集成netty實現(xiàn)websocket通信功能,需要的朋友可以參考下
    2024-03-03
  • SpringMVC Restful api接口實現(xiàn)的代碼

    SpringMVC Restful api接口實現(xiàn)的代碼

    本篇文章主要介紹了SpringMVC Restful api接口實現(xiàn)的代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • maven如何使用profiles多環(huán)境配置

    maven如何使用profiles多環(huán)境配置

    在軟件開發(fā)過程中,我們經(jīng)常需要在不同的環(huán)境中部署和運行我們的應用程序,例如開發(fā)環(huán)境、測試環(huán)境和生產(chǎn)環(huán)境,為了方便管理和配置不同環(huán)境下的參數(shù),我們可以使用Maven的profiles功能,本文給大家介紹maven如何使用profiles多環(huán)境配置,感興趣的的朋友一起看看吧
    2024-02-02
  • screw?Maven插件方式運行時在編譯打包時跳過執(zhí)行的問題解決方法

    screw?Maven插件方式運行時在編譯打包時跳過執(zhí)行的問題解決方法

    這篇文章主要介紹了screw?Maven插件方式運行時在編譯打包時跳過執(zhí)行的問題解決方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • Java Swing組件單選框JRadioButton用法示例

    Java Swing組件單選框JRadioButton用法示例

    這篇文章主要介紹了Java Swing組件單選框JRadioButton用法,結(jié)合具體實例形式分析了Swing單選框JRadioButton的使用方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2017-11-11
  • Springboot連接和操作mongoDB方式

    Springboot連接和操作mongoDB方式

    這篇文章主要介紹了Springboot連接和操作mongoDB方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • SpringBoot熱部署配置方法詳解

    SpringBoot熱部署配置方法詳解

    在實際開發(fā)中,每次修改代碼就需要重啟項目,重新部署,對于一個后端開發(fā)者來說,重啟確實很難受。在java開發(fā)領域,熱部署一直是一個難以解決的問題,目前java虛擬機只能實現(xiàn)方法體的熱部署,對于整個類的結(jié)構(gòu)修改,仍然需要重啟項目
    2022-11-11

最新評論

道真| 鄂尔多斯市| 竹山县| 南召县| 从江县| 乐陵市| 黑河市| 冀州市| 祁门县| 陕西省| 威远县| 武安市| 临江市| 得荣县| 澳门| 根河市| 讷河市| 张家港市| 烟台市| 上思县| 仪陇县| 庆城县| 孟连| 彩票| 恭城| 盱眙县| 临沂市| 平潭县| 迁安市| 台山市| 伊金霍洛旗| 天镇县| 长宁县| 高淳县| 织金县| 汝南县| 奉贤区| 盐津县| 五家渠市| 邻水| 承德县|