成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

無(wú)狀態(tài)會(huì)話

waltr / 2270人閱讀

摘要:一當(dāng)用戶訪問(wèn)一個(gè)系統(tǒng)的時(shí)候,是不存在會(huì)話這種東西的,訪問(wèn)一次就斷開(kāi)和系統(tǒng)之間的連接,這種情況下一般來(lái)說(shuō)需要在后臺(tái)做控制來(lái)維系用戶和系統(tǒng)之間的關(guān)系。

一、What?
當(dāng)用戶訪問(wèn)一個(gè)系統(tǒng)的時(shí)候,是"不存在"會(huì)話這種東西的,訪問(wèn)一次就斷開(kāi)和系統(tǒng)之間的連接,這種情況下一般來(lái)說(shuō)需要在后臺(tái)做控制來(lái)維系用戶和系統(tǒng)之間的關(guān)系。既然Tomcat服務(wù)器做不到,那么可以考慮用redis來(lái)實(shí)現(xiàn)。
二、Why? Redis-session的好處

便于拓展,當(dāng)單體應(yīng)用擴(kuò)展成集群會(huì)相當(dāng)方便

便于權(quán)限認(rèn)證

三、How? 1、當(dāng)用戶注冊(cè)或登錄時(shí),保存唯一Token到redis中
String uniqueToken = UUID.randomUUID().toString();
redis.set(USER_REDIS_SESSION+":"+userModel.getId(), uniqueToken, 1000 * 60 * 30);
2、當(dāng)用戶需要做某些操作時(shí)(比如上傳文件,修改個(gè)人信息等),可以通過(guò)攔截器來(lái)對(duì)用戶做驗(yàn)證
@Autowired
    public RedisOperator redis;
    public static final String USER_REDIS_SESSION = "user-redis-session";
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String userId = request.getHeader("userId");
        String userToken = request.getHeader("userToken");
        if(StringUtils.isNoneBlank(userId) && StringUtils.isNoneBlank(userToken)){
            String uniqueToken = redis.get(USER_REDIS_SESSION + ":" + userId);
            if(StringUtils.isEmpty(uniqueToken) && StringUtils.isBlank(uniqueToken)){
                //userToken在redis中已過(guò)時(shí),需重新登錄
                System.out.println("請(qǐng)登錄。。");
                returnErrorResponse(response,IMoocJSONResult.errorTokenMsg("請(qǐng)登錄。。"));
                return false;
            }else{
               if(!uniqueToken.equals(userToken)){
                   //userToken被修改了,說(shuō)明有其他人登錄,這里可以控制只能一個(gè)人登錄
                   System.out.println("賬號(hào)被擠出...");
                   returnErrorResponse(response,IMoocJSONResult.errorTokenMsg("賬號(hào)被擠出..."));
                   return false;
               }
            }
        }else{
            //消息頭沒(méi)有userId和userToken說(shuō)明用戶還未登錄
            System.out.println("請(qǐng)登錄。。");
            returnErrorResponse(response,IMoocJSONResult.errorTokenMsg("請(qǐng)登錄。。"));
            return false;
        }
        return true;
    }
    
    ..........
    ..........
    
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(miniInterceptor()).addPathPatterns("/user/**")
                                                  .addPathPatterns("/bgm/**")
                                                  .addPathPatterns("/video/userLike","/video/userUnLike","/video/saveComment")
                                                  .addPathPatterns("/video/upload","/video/uploadCover")
                                                  .excludePathPatterns("/user/queryPublisher");
        WebMvcConfigurer.super.addInterceptors(registry);
    }

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/74089.html

相關(guān)文章

  • 第六天-《企業(yè)應(yīng)用架構(gòu)模式》-會(huì)話狀態(tài)

    摘要:無(wú)狀態(tài)的價(jià)值無(wú)狀態(tài)可以僅用很少的對(duì)象就可以處理很多的用戶,空閑狀態(tài)的用戶越多,無(wú)狀態(tài)服務(wù)器就越有用會(huì)話狀態(tài)相關(guān)性會(huì)話狀態(tài)只與當(dāng)前會(huì)話有關(guān),它存在于業(yè)務(wù)事務(wù)中,與其他會(huì)話及他們的業(yè)務(wù)事務(wù)是分開(kāi)的與記錄數(shù)據(jù)信息的區(qū)別記錄數(shù)據(jù)時(shí)長(zhǎng)期保存在數(shù)據(jù)庫(kù)中 1. 無(wú)狀態(tài)的價(jià)值: 無(wú)狀態(tài)可以僅用很少的對(duì)象就可以處理很多的用戶,空閑狀態(tài)的用戶越多,無(wú)狀態(tài)服務(wù)器就越有用 2. 會(huì)話狀態(tài): 相關(guān)性:會(huì)話狀態(tài)只...

    FrancisSoung 評(píng)論0 收藏0
  • 小哥哥,小姐姐,我有一份tcp、http面試指南你要嗎?

    摘要:會(huì)通過(guò)建立起一個(gè)到服務(wù)器的連接通道,當(dāng)本次請(qǐng)求需要的數(shù)據(jù)完畢后,會(huì)立即將連接斷開(kāi),這個(gè)過(guò)程是很短的。這三個(gè)部分以作為分隔符。最后一個(gè)消息頭有兩個(gè),用來(lái)表示消息頭部的結(jié)束。但是這并不代表建立在協(xié)議之上的應(yīng)用程序就無(wú)法維持狀態(tài)。 來(lái)來(lái)來(lái) 對(duì),我就是騙你進(jìn)來(lái)的。嘿嘿嘿... 既然來(lái)了就看看再走嘛 作為一個(gè)學(xué)通信出身的前端,說(shuō)道http、tcp什么的,算是到了我的領(lǐng)域了。(我會(huì)告訴你我上課凈睡...

    GitCafe 評(píng)論0 收藏0
  • cookie

    摘要:背景是一種無(wú)狀態(tài)的協(xié)議,它不對(duì)請(qǐng)求和響應(yīng)之間的通信狀態(tài)進(jìn)行保存,即無(wú)法根據(jù)之前的狀態(tài)進(jìn)行本次請(qǐng)求的處理。為了保留無(wú)狀態(tài)協(xié)議這個(gè)特征的同時(shí)又要解決類似的矛盾問(wèn)題,于是引入了。主要目的是為防止跨站腳本攻擊對(duì)的信息竊取。 需求場(chǎng)景 一個(gè)Vue單頁(yè)應(yīng)用,A、B、C 三個(gè)頁(yè)面都引用了一個(gè)公用的時(shí)間選擇器。用戶在各自頁(yè)面選擇完時(shí)間后,A,B,C頁(yè)面互相切換時(shí)保存選擇的時(shí)間,在關(guān)閉瀏覽器tab后,清...

    bawn 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<