摘要:一當用戶訪問一個系統的時候,是不存在會話這種東西的,訪問一次就斷開和系統之間的連接,這種情況下一般來說需要在后臺做控制來維系用戶和系統之間的關系。
一、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. 會話狀態: 相關性:會話狀態只...
摘要:會通過建立起一個到服務器的連接通道,當本次請求需要的數據完畢后,會立即將連接斷開,這個過程是很短的。這三個部分以作為分隔符。最后一個消息頭有兩個,用來表示消息頭部的結束。但是這并不代表建立在協議之上的應用程序就無法維持狀態。 來來來 對,我就是騙你進來的。嘿嘿嘿... 既然來了就看看再走嘛 作為一個學通信出身的前端,說道http、tcp什么的,算是到了我的領域了。(我會告訴你我上課凈睡...
閱讀 1714·2021-11-22 15:33
閱讀 2085·2021-10-08 10:04
閱讀 3543·2021-08-27 13:12
閱讀 3418·2019-08-30 13:06
閱讀 1467·2019-08-29 16:43
閱讀 1391·2019-08-29 16:40
閱讀 786·2019-08-29 16:15
閱讀 2746·2019-08-29 14:13