国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

無狀態會話

waltr / 2262人閱讀

摘要:一當用戶訪問一個系統的時候,是不存在會話這種東西的,訪問一次就斷開和系統之間的連接,這種情況下一般來說需要在后臺做控制來維系用戶和系統之間的關系。

一、What?
當用戶訪問一個系統的時候,是"不存在"會話這種東西的,訪問一次就斷開和系統之間的連接,這種情況下一般來說需要在后臺做控制來維系用戶和系統之間的關系。既然Tomcat服務器做不到,那么可以考慮用redis來實現。
二、Why? Redis-session的好處

便于拓展,當單體應用擴展成集群會相當方便

便于權限認證

三、How? 1、當用戶注冊或登錄時,保存唯一Token到redis中
String uniqueToken = UUID.randomUUID().toString();
redis.set(USER_REDIS_SESSION+":"+userModel.getId(), uniqueToken, 1000 * 60 * 30);
2、當用戶需要做某些操作時(比如上傳文件,修改個人信息等),可以通過攔截器來對用戶做驗證
@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中已過時,需重新登錄
                System.out.println("請登錄。。");
                returnErrorResponse(response,IMoocJSONResult.errorTokenMsg("請登錄。。"));
                return false;
            }else{
               if(!uniqueToken.equals(userToken)){
                   //userToken被修改了,說明有其他人登錄,這里可以控制只能一個人登錄
                   System.out.println("賬號被擠出...");
                   returnErrorResponse(response,IMoocJSONResult.errorTokenMsg("賬號被擠出..."));
                   return false;
               }
            }
        }else{
            //消息頭沒有userId和userToken說明用戶還未登錄
            System.out.println("請登錄。。");
            returnErrorResponse(response,IMoocJSONResult.errorTokenMsg("請登錄。。"));
            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);
    }

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74089.html

相關文章

  • 第六天-《企業應用架構模式》-會話狀態

    摘要:無狀態的價值無狀態可以僅用很少的對象就可以處理很多的用戶,空閑狀態的用戶越多,無狀態服務器就越有用會話狀態相關性會話狀態只與當前會話有關,它存在于業務事務中,與其他會話及他們的業務事務是分開的與記錄數據信息的區別記錄數據時長期保存在數據庫中 1. 無狀態的價值: 無狀態可以僅用很少的對象就可以處理很多的用戶,空閑狀態的用戶越多,無狀態服務器就越有用 2. 會話狀態: 相關性:會話狀態只...

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

    摘要:會通過建立起一個到服務器的連接通道,當本次請求需要的數據完畢后,會立即將連接斷開,這個過程是很短的。這三個部分以作為分隔符。最后一個消息頭有兩個,用來表示消息頭部的結束。但是這并不代表建立在協議之上的應用程序就無法維持狀態。 來來來 對,我就是騙你進來的。嘿嘿嘿... 既然來了就看看再走嘛 作為一個學通信出身的前端,說道http、tcp什么的,算是到了我的領域了。(我會告訴你我上課凈睡...

    GitCafe 評論0 收藏0
  • cookie

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

    bawn 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<