" />

亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Redis?+?Java攔截器實現(xiàn)用戶匿名和非匿名訪問

 更新時間:2022年06月13日 09:02:27   作者:步爾斯特  
本文主要介紹了Redis?+?Java攔截器實現(xiàn)用戶匿名和非匿名訪問,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

該篇文章以《Redis實現(xiàn)短信驗證碼登錄》這篇文章為基礎(chǔ),以Redis和Java攔截器為核心,對登錄功能展開研究和應(yīng)用。

需求

  • 對所有的接口按需分類
  • 一些接口可以匿名訪問
  • 一些接口必須登錄才可以訪問
  • 刷新token

實現(xiàn)截圖

獲取驗證碼

用驗證碼完成登錄,并獲取token

用token實現(xiàn)訪問非匿名訪問接口

核心代碼

WebMvcConfigurer

/**
 * @author issavior
 */
@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new RefreshTokenInterceptor(redisTemplate))
                .addPathPatterns("/**").order(0);
        registry.addInterceptor(new MyHandlerInterceptor()).addPathPatterns("/user/pay").order(1);
    }
}

HandlerInterceptor

刷新token、添加和移除用戶信息到Threadlocal、

/**
 * @author issavior
 */
@Slf4j
public class RefreshTokenInterceptor implements HandlerInterceptor {

    private final RedisTemplate<String, Object> redisTemplate;

    public RefreshTokenInterceptor(RedisTemplate<String, Object> redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)  {

        String token = request.getHeader("authToken");
        if (StrUtil.isBlank(token)) {
            return true;
        }

        String key = "token:"+token;

        Issa issa = (Issa)redisTemplate.opsForValue().get(key);
        if (issa == null) {
            return true;
        }

        UserHolder.saveUser(issa);

        redisTemplate.expire(key, 60, TimeUnit.SECONDS);

        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

        log.info("postHandle");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        UserHolder.removeUser();
    }
}

判斷用戶是否有權(quán)限

/**
 * @author issavior
 */
public class MyHandlerInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 1.判斷是否需要攔截(ThreadLocal中是否有用戶)
        if (UserHolder.getUser() == null) {
            // 沒有,需要攔截,設(shè)置狀態(tài)碼
            response.setStatus(401);
            // 攔截
            return false;
        }
        // 有用戶,則放行
        return true;
    }
}

ThreadLocal

/**
 * @author issavior
 */
public class UserHolder {

    private static final ThreadLocal<Issa> tl = new ThreadLocal<>();

    public static void saveUser(Issa user){
        tl.set(user);
    }

    public static Issa getUser(){
        return tl.get();
    }

    public static void removeUser(){
        tl.remove();
    }

}

到此這篇關(guān)于Redis + Java攔截器實現(xiàn)用戶匿名和非匿名訪問的文章就介紹到這了,更多相關(guān)Redis Java用戶匿名和非匿名訪問內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring之spring-context-indexer依賴詳解

    Spring之spring-context-indexer依賴詳解

    這篇文章主要介紹了Spring之spring-context-indexer依賴詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java中的IO讀寫原理詳解

    Java中的IO讀寫原理詳解

    這篇文章主要介紹了Java中的IO讀寫原理,IO是指輸入和輸出操作的技術(shù),它提供了一組用于讀取和寫入數(shù)據(jù)的類,以及用于處理字符和字節(jié)數(shù)據(jù)的接口,這些類和接口可以用于讀取和寫入文件、網(wǎng)絡(luò)流、內(nèi)存緩沖區(qū)等各種數(shù)據(jù)源和目標(biāo),需要的朋友可以參考下
    2023-08-08
  • Java實現(xiàn)在Word指定位置插入分頁符

    Java實現(xiàn)在Word指定位置插入分頁符

    在Word插入分頁符可以在指定段落后插入,也可以在特定文本位置處插入。本文將以Java代碼來操作以上兩種文檔分頁需求,需要的可以參考一下
    2022-04-04
  • java 生成文字圖片的示例代碼

    java 生成文字圖片的示例代碼

    本篇文章主要介紹了java 生成文字圖片的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Java中GC的工作原理詳細(xì)介紹

    Java中GC的工作原理詳細(xì)介紹

    這篇文章主要介紹了Java中GC的工作原理詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • java實現(xiàn)雙色球彩票游戲

    java實現(xiàn)雙色球彩票游戲

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)雙色球彩票游戲,超級簡單的邏輯,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • Sentinel熱點(diǎn)key限流的實現(xiàn)詳解

    Sentinel熱點(diǎn)key限流的實現(xiàn)詳解

    這篇文章主要介紹了Sentinel熱點(diǎn)key限流的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Java基礎(chǔ)之讓你徹底搞懂代理模式

    Java基礎(chǔ)之讓你徹底搞懂代理模式

    這篇文章主要介紹了Java基礎(chǔ)之讓你徹底搞懂代理模式,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • JDBC示例代碼

    JDBC示例代碼

    本教程提供了如何創(chuàng)建一個簡單的JDBC應(yīng)用程序的示例。演示如何打開一個數(shù)據(jù)庫連接,執(zhí)行SQL查詢,并顯示結(jié)果
    2014-03-03
  • Java實現(xiàn)刪除排序數(shù)組中重復(fù)元素的方法小結(jié)【三種方法比較】

    Java實現(xiàn)刪除排序數(shù)組中重復(fù)元素的方法小結(jié)【三種方法比較】

    這篇文章主要介紹了Java實現(xiàn)刪除排序數(shù)組中重復(fù)元素的方法,結(jié)合實例形式對比分析了三種常見的數(shù)組元素刪除算法操作技巧,需要的朋友可以參考下
    2019-02-02

最新評論