摘要:一當用戶訪問一個系統(tǒng)的時候,是不存在會話這種東西的,訪問一次就斷開和系統(tǒng)之間的連接,這種情況下一般來說需要在后臺做控制來維系用戶和系統(tǒng)之間的關系。
一、What?
當用戶訪問一個系統(tǒng)的時候,是"不存在"會話這種東西的,訪問一次就斷開和系統(tǒng)之間的連接,這種情況下一般來說需要在后臺做控制來維系用戶和系統(tǒng)之間的關系。既然Tomcat服務器做不到,那么可以考慮用redis來實現(xiàn)。二、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); }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://www.ezyhdfw.cn/yun/74089.html
摘要:無狀態(tài)的價值無狀態(tài)可以僅用很少的對象就可以處理很多的用戶,空閑狀態(tài)的用戶越多,無狀態(tài)服務器就越有用會話狀態(tài)相關性會話狀態(tài)只與當前會話有關,它存在于業(yè)務事務中,與其他會話及他們的業(yè)務事務是分開的與記錄數據信息的區(qū)別記錄數據時長期保存在數據庫中 1. 無狀態(tài)的價值: 無狀態(tài)可以僅用很少的對象就可以處理很多的用戶,空閑狀態(tài)的用戶越多,無狀態(tài)服務器就越有用 2. 會話狀態(tài): 相關性:會話狀態(tài)只...
摘要:會通過建立起一個到服務器的連接通道,當本次請求需要的數據完畢后,會立即將連接斷開,這個過程是很短的。這三個部分以作為分隔符。最后一個消息頭有兩個,用來表示消息頭部的結束。但是這并不代表建立在協(xié)議之上的應用程序就無法維持狀態(tài)。 來來來 對,我就是騙你進來的。嘿嘿嘿... 既然來了就看看再走嘛 作為一個學通信出身的前端,說道http、tcp什么的,算是到了我的領域了。(我會告訴你我上課凈睡...
閱讀 1781·2021-11-22 15:33
閱讀 2191·2021-10-08 10:04
閱讀 3607·2021-08-27 13:12
閱讀 3484·2019-08-30 13:06
閱讀 1526·2019-08-29 16:43
閱讀 1461·2019-08-29 16:40
閱讀 855·2019-08-29 16:15
閱讀 2824·2019-08-29 14:13