摘要:一当用户访问一个系统的时候,是不存在会话这种东西的,访问一次就断开和系统之间的连接,这种情况下一般来说需要在后台做控制来维系用户和系统之间的关系。
一、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); }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/74089.html
摘要:无状态的价值无状态可以仅用很少的对象就可以处理很多的用户,空闲状态的用户越多,无状态服务器就越有用会话状态相关性会话状态只与当前会话有关,它存在于业务事务中,与其他会话及他们的业务事务是分开的与记录数据信息的区别记录数据时长期保存在数据库中 1. 无状态的价值: 无状态可以仅用很少的对象就可以处理很多的用户,空闲状态的用户越多,无状态服务器就越有用 2. 会话状态: 相关性:会话状态只...
摘要:会通过建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,会立即将连接断开,这个过程是很短的。这三个部分以作为分隔符。最后一个消息头有两个,用来表示消息头部的结束。但是这并不代表建立在协议之上的应用程序就无法维持状态。 来来来 对,我就是骗你进来的。嘿嘿嘿... 既然来了就看看再走嘛 作为一个学通信出身的前端,说道http、tcp什么的,算是到了我的领域了。(我会告诉你我上课净睡...
阅读 1697·2021-11-22 15:33
阅读 1956·2021-10-08 10:04
阅读 3525·2021-08-27 13:12
阅读 3402·2019-08-30 13:06
阅读 1449·2019-08-29 16:43
阅读 1366·2019-08-29 16:40
阅读 765·2019-08-29 16:15
阅读 2728·2019-08-29 14:13