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

SpringBoot基于Redis實現(xiàn)token的在線續(xù)期的實踐

 更新時間:2024年12月30日 10:56:49   作者:JKQingNing  
本文主要介紹了使用Redis實現(xiàn)JWT令牌在線續(xù)期的方案,通過在線續(xù)期token,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

相信很多小伙伴會發(fā)現(xiàn),token這個東西在方便的同時也有一絲絲麻煩(想了解或?qū)W習token相關知識請移步:JAVA后端實現(xiàn)JWT令牌

原因很簡單,其實就是token的過期時間究竟設置多久才算合理,一小時太短,一百年又太長。所以在線續(xù)期token是一種很好的解決方案,我的實現(xiàn)思路是:取消原先token自己的過期時長,然后將token存入redis中,key是token,value也是token,存進去什么不重要,重要的是可以根據(jù)key去獲取value(有效并且沒過期),需要的時候隨時可以取出來,然后給這個redis一個過期時間,眾所周知redis的過期時間是可以重置的,因此在用戶每次進行操作的時候就重新給redis一個過期時間即可。大概思路就是這樣,醍醐灌頂?shù)男』锇楝F(xiàn)在就可以自己去試一下!

這是我們之前的實現(xiàn)思路,也就是給token一個過期時間,然后token過期之后銷毀。我們現(xiàn)在吧過期時間直接刪掉。

我們現(xiàn)在只在token中放入我們需要的載荷信息以及簽名算法。

然后我們需要去修改登錄的邏輯,以前是生成一個token返回到前端,現(xiàn)在需要添加一步:將token存入redis中。

這樣就實現(xiàn)了redis的儲存,現(xiàn)在我們實現(xiàn)續(xù)期,我們?nèi)バ薷臄r截器的邏輯。

以下是我項目中攔截器的代碼: 

 public boolean preHandle(@NotNull HttpServletRequest request, @NotNull HttpServletResponse response, @NotNull Object handler) throws Exception {
        if (!(handler instanceof HandlerMethod)) {
            return true;
        }

        List<String> asList = Arrays.asList("/login", "/pageHomeImages", "/register", "/doc.html", "/v2", "/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui.html/**");
        String requestUrl = request.getRequestURI();
        log.info("請求的url為:{}", requestUrl);

        if (asList.stream().anyMatch(requestUrl::contains)) {
            log.info("{}-->已放行", requestUrl);
            return true;
        }

        String token = request.getHeader("token");
        log.info("從請求頭中獲取的令牌:{}", token);

        if (!StringUtils.hasLength(token)) {
            log.warn("Token不存在");
            throw new CustomException(401, Constant.TOKEN_ERROR);
        }

        try {
            if (redisTemplate.opsForValue().get(token) != null) {
                Claims claims = JwtUtils.parseJWT(token);
                ThreadLocalContext.setUserId(claims.get("id").toString());
                redisTemplate.opsForValue().set(token, token, DELAYED_TIME, TimeUnit.SECONDS);
                log.info("{}-->已放行", requestUrl);
                log.info("用戶:{}-->token已在線續(xù)期一小時", claims.get("id").toString());
                return true;
            } else {
                log.warn("token已過期");
                throw new CustomException(401, Constant.TOKEN_TIMEOUT);
            }
        } catch (Exception e) {
            log.error("token在線續(xù)期失敗!");
            throw new CustomException(401, Constant.USER_STATUS_ERROR);
        }
    }

 至此已全部完成,只要用戶有相關操作,即可實現(xiàn)刷新token的效果,在此基礎上,還可以實現(xiàn)類似于獲取當前過期時間并在此基礎上增加時間等效果。

到此這篇關于SpringBoot基于Redis實現(xiàn)token的在線續(xù)期的實踐的文章就介紹到這了,更多相關SpringBoot token的在線續(xù)期內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java基于socket實現(xiàn)的客戶端和服務端通信功能完整實例

    Java基于socket實現(xiàn)的客戶端和服務端通信功能完整實例

    這篇文章主要介紹了Java基于socket實現(xiàn)的客戶端和服務端通信功能,結合完整實例形式分析了Java使用socket建立客戶端與服務器端連接與通信功能,需要的朋友可以參考下
    2018-05-05
  • Java項目導入IDEA的流程配置以及常見問題解決方法

    Java項目導入IDEA的流程配置以及常見問題解決方法

    通常一個團隊中可能有人用eclipse,有人用intelliJ,那么經(jīng)常會出現(xiàn)需要導入別人用eclipse建好的web項目,下面這篇文章主要給大家介紹了關于Java項目導入IDEA的流程配置以及常見問題解決方法的相關資料,需要的朋友可以參考下
    2023-05-05
  • Java利用FTPClient實現(xiàn)文件上傳和下載的實踐指南

    Java利用FTPClient實現(xiàn)文件上傳和下載的實踐指南

    本文介紹如何使用Java中的FTPClient庫來執(zhí)行文件的上傳和下載操作,首先,講解了FTPClient的基本用法,包括連接FTP服務器和登錄驗證,然后,詳細說明了如何使用 storeFile() 和 retrieveFile() 方法分別實現(xiàn)文件上傳和下載,需要的朋友可以參考下
    2025-05-05
  • Java使用EasyExcel實現(xiàn)對excel文件的讀寫方式

    Java使用EasyExcel實現(xiàn)對excel文件的讀寫方式

    這篇文章主要介紹了Java使用EasyExcel實現(xiàn)對excel文件的讀寫方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 詳解JAVA中priorityqueue的具體使用

    詳解JAVA中priorityqueue的具體使用

    這篇文章主要介紹了詳解JAVA中priorityqueue的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • Java實現(xiàn)簡易圖書借閱系統(tǒng)

    Java實現(xiàn)簡易圖書借閱系統(tǒng)

    這篇文章主要為大家詳細介紹了Java實現(xiàn)簡易圖書借閱系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Java中byte[]、String、Hex字符串等轉(zhuǎn)換的方法

    Java中byte[]、String、Hex字符串等轉(zhuǎn)換的方法

    這篇文章主要介紹了Java中byte[]、String、Hex字符串等轉(zhuǎn)換的方法,代碼很簡單,需要的朋友可以參考下
    2018-05-05
  • Java設計模式中單一職責原則詳解

    Java設計模式中單一職責原則詳解

    這篇文章主要介紹了Java設計模式中單一職責原則詳解,單一職責原則 (SRP) 是軟件設計中的一個重要原則,它要求每個類只負責一個職責,需要的朋友可以參考下
    2023-05-05
  • java中Servlet Cookie取不到值原因解決辦法

    java中Servlet Cookie取不到值原因解決辦法

    這篇文章主要介紹了java中Servlet Cookie取不到值原因解決辦法的相關資料,需要的朋友可以參考下
    2017-06-06
  • Java中的HttpServletRequestWrapper用法解析

    Java中的HttpServletRequestWrapper用法解析

    這篇文章主要介紹了Java中的HttpServletRequestWrapper用法解析,HttpServletRequest 對參數(shù)值的獲取實際調(diào)的是org.apache.catalina.connector.Request,沒有提供對應的set方法修改屬性,所以不能對前端傳來的參數(shù)進行修改,需要的朋友可以參考下
    2024-01-01

最新評論