当前位置: 首页 > news >正文

分布式会话拦截器

1.分布式会话拦截器-构建拦截器

背景:对于不同的用户进行权限拦截(基于token的判断)
实现过程:在api下构建包以及相关的文件,创建UserTokenInterceptor,实现implements handlerInterceptor.重写三种主要方法。 preHandle postHandle afterCompletion
然后将Interceptor放入容器中:
实现方式,重写WebMvcConfigurer,Bean装配UserTokenInterceptor,然后重写addInterceptors()方法。

public UserTokenInterceptor userTokenInterceptor(){return new UserTokenInterceptor();
}
/*** 注册拦截器* @param registry*/
@Override
public void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(userTokenInterceptor()).addPathPatterns("/hello");WebMvcConfigurer.super.addInterceptors(registry);
}

2.分布式会话拦截器-会话判断

根据用户信息处理拦截业务。能不能根据用户的id拿到用户的token,当此token与前端传过来的token匹配,代表当前的操作就是当前的发起人,认证通过;否则就拒绝。

代码思路:拦截器中获取前端传过来的数据(需要与前端约定数据传过来的方式。)
(注意:拦截器中的数据与业务是需要区分开的,一般放到headers里面去做验证,而不是放到userInfoMore里面去传到后端,这样做是为了降低耦合度)
在这里插入图片描述
代码示例:
代码:

@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        System.out.println("进入拦截器,请求已经被拦截...");String userId = request.getHeader("headerUserId");String userToken =request.getHeader("headerUserToken");if (StringUtils.isNoneBlank(userId)&&StringUtils.isNoneBlank(userToken)){String uniqueToken =redisOperator.get(REDIS_USER_TOKEN+":"+userId);if (StringUtils.isBlank(uniqueToken)){logger.info("redis数据库中token数据查询不到");return  false;}else {if (!uniqueToken.equals(userToken)){System.out.println("账号在异地登录");return false;}}}else {logger.info("用户信息为空,请重新登录");return false;}/*** false:请求被拦截,被驳回,验证出现问题* true:请求在经过验证校验以后是可以放行的*/return false;}

3.分布式会话拦截器3-错误返回

代码示例:

//处理错误信息返回前端public void returnErrorResponse(HttpServletResponse response,JSONResult result){OutputStream out = null;try {response.setCharacterEncoding("utf-8");response.setContentType("text/json");out = response.getOutputStream();//byte转成json数据out.write(JsonUtils.objectToJson(result).getBytes("utf-8"));} catch (IOException e) {e.printStackTrace();}finally {try {if (out != null){out.close();}}catch (IOException e) {e.printStackTrace();}}}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Redis之List列表
  • 【python虚拟环境管理】【mac m3】使用poetry管理python项目
  • 持续集成04--Jenkins结合Gitee创建项目
  • 今日安装了一下Eclipse,配置了SVN
  • WSL2 Centos7 Docker服务启动失败怎么办?
  • 单臂路由组网实验,单臂路由的定义、适用情况、作用
  • 科技云报道:将技术普惠进行到底,百度智能云云原生数据库GaiaDB来啦!
  • 【海外云手机】静态住宅IP集成解决方案
  • LeNet实验 四分类 与 四分类变为多个二分类
  • 【Python】TensorFlow介绍与实战
  • 55 、mysql的存储引擎、备份恢复以及日志备份、恢复
  • 【Vue3】响应式数据
  • RocketMQ~架构与工作流程了解
  • electron项目中实现视频下载保存到本地
  • 【深度学习】VGG-16原理及代码实现
  • Google 是如何开发 Web 框架的
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 【附node操作实例】redis简明入门系列—字符串类型
  • C++类的相互关联
  • co模块的前端实现
  • Laravel5.4 Queues队列学习
  • leetcode-27. Remove Element
  • Mysql数据库的条件查询语句
  • Node项目之评分系统(二)- 数据库设计
  • Protobuf3语言指南
  • sessionStorage和localStorage
  • SQLServer之创建数据库快照
  • 构造函数(constructor)与原型链(prototype)关系
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 山寨一个 Promise
  • 使用权重正则化较少模型过拟合
  • 王永庆:技术创新改变教育未来
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 译米田引理
  • Android开发者必备:推荐一款助力开发的开源APP
  • ​数据链路层——流量控制可靠传输机制 ​
  • # 数据结构
  • #HarmonyOS:Web组件的使用
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #传输# #传输数据判断#
  • (k8s)Kubernetes本地存储接入
  • (二)测试工具
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (回溯) LeetCode 77. 组合
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (一)UDP基本编程步骤
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)人的集合论——移山之道
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .NET C# 使用 iText 生成PDF
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .NET简谈设计模式之(单件模式)
  • .NET连接MongoDB数据库实例教程
  • .NET企业级应用架构设计系列之开场白
  • .net生成的类,跨工程调用显示注释