web会话跟踪以及JWT响应拦截机制

目录

JWT

会话跟踪

token

响应拦截器


http是无状态的,登录成功后,客户端就与服务器断开连接,之后再向后端发送请求时,后端需要知道前端是哪个用户在进行操作。

JWT

Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一 种基于 JSON 的开放标准((RFC 7519).定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 对象的形式安全的传递信息。

会话跟踪

1. 用户使用账号和密码发出 post 请求;

2. 服务器使用私钥创建一个 jwt;

public class JWTUtil {/*** 根据用户id,账号生成token* @param admin* @return*/public static String getToken(Admin admin) {String token = "";try {//过期时间 为1970.1.1 0:0:0 至 过期时间  当前的毫秒值 + 有效时间Date expireDate = new Date(new Date().getTime() + 10*1000);//秘钥及加密算法Algorithm algorithm = Algorithm.HMAC256("ZCEQIUBFKSJBFJH2020BQWE");//设置头部信息Map<String,Object> header = new HashMap<>();header.put("typ","JWT");header.put("alg","HS256");//携带id,账号信息,生成签名token = JWT.create().withHeader(header).withClaim("id",admin.getId()).withClaim("account",admin.getAccount()).withExpiresAt(expireDate).sign(algorithm);}catch (Exception e){e.printStackTrace();return  null;}return token;}/*** 验证token是否有效* @param token* @return*/public static boolean verify(String token){try {//验签Algorithm algorithm = Algorithm.HMAC256("ZCEQIUBFKSJBFJH2020BQWE");JWTVerifier verifier = JWT.require(algorithm).build();DecodedJWT jwt = verifier.verify(token);return true;} catch (Exception e) {//当传过来的token如果有问题,抛出异常return false;}}/*** 获得token 中playload部分数据,按需使用* @param token* @return*/public static DecodedJWT getTokenInfo(String token){return JWT.require(Algorithm.HMAC256("ZCEQIUBFKSJBFJH2020BQWE")).build().verify(token);}}

3. 服务器返回这个 jwt 给浏览器;

4. 浏览器将该 jwt 串在请求头中像服务器发送请求;

5. 服务器验证该 jwt;

6. 返回响应的资源给浏览器。

由于在每次的前后端交互过程中都需要进行token的验证,为了降低代码的冗余,可以借助过滤器来帮助我们完成这个工作。

public class AdminTokenFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest)servletRequest;String adminToken = request.getHeader("adminToken");boolean verify = JWTUtil.verify(adminToken);if(verify){filterChain.doFilter(servletRequest, servletResponse);}else {//token验证失败servletResponse.setContentType("text/html;charset=utf-8");PrintWriter printWriter = servletResponse.getWriter();CommonResult commonResult = new CommonResult(401, "token验证失败");ObjectMapper objectMapper = new ObjectMapper();String json = objectMapper.writeValueAsString(commonResult);printWriter.write(json);}}
}

token

1.将后端封装好的信息发送给前端

2.前端接收后存储在sessionStorage对象中

3.在后面每次发送请求时都将token放入请求头中发送到后端进行验证

4.后端在对token进行解析

响应拦截器

如果token验证失败,后端向前端传回一个标识用于告诉前端token验证失败

在前端main.js中添加拦截器

// 添加响应拦截器
axios.interceptors.response.use((resp) => { //正常响应拦截if (resp.data.code == 500) {ElementUI.Message({message: resp.data.message,type: "error"})}if (resp.data.code == 401) {//自定义的状态码ElementUI.Message({message: "token验证失败",type: "error"})router.replace("/login");}return resp;
});

这样每次前端进行操作时都会先验证token

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/35811.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity特效总览

一、粒子 Unity中的粒子组件叫做Particle System。 粒子系统顾名思义&#xff0c;与“微粒”有关。粒子系统会生成和发射很多粒子&#xff0c;通过控制粒子的生成数量、大小、角度、速度、贴图和颜色等众多属性&#xff0c;可以实现或真实或炫酷的各种效果。其中&#xff0c;…

leetcode做题笔记76最小覆盖子串

给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 "" 。 注意&#xff1a; 对于 t 中重复字符&#xff0c;我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。如果…

【Unity】VS Code 没有智能提示 Unity 中的类

正常来说&#xff0c;VS Code中会对部分输入类名进行提示&#xff0c;如下图所述 假如你从Unity 中进入 VS Code后发现没有提示相关 Unity的类&#xff0c;可能是 Unity 中 有关于 VS Code的相关Package 没有跟着 VS Code升级到最新版本。 点击Unity Windows 下拉框中的 Pac…

如何在电力行业运用IPD?

电力行业是国民经济众多垄断行业中较早实施改革的行业之一。近几年我国电力行业保持着较快的发展速度&#xff0c;也取得了很大的成绩&#xff0c;发电机容量和发电量居世界首位。2015-2020年&#xff0c;全国发电量不断攀升。 电力是以电能作为动力的能源。电力的发现和应用掀…

简绘ChatGPT支持Midjourney绘图 支持stable diffusion绘图

简绘支持Midjourney绘图和stable diffusion绘图。 这意味着简绘具备Midjourney绘图和stable diffusion绘图功能的支持。

生信豆芽菜-单基因表达比较

网址&#xff1a;http://www.sxdyc.com/panCancerExpCom 该工具主要用于查看单基因在泛癌的癌组织和癌旁组织中表达比较&#xff0c;可以只选择TCGA数据库&#xff0c;也可以选择TCGAGTEx数据库&#xff08;GTEx数据库&#xff0c;存放了正常组织全基因的表达谱&#xff09; …

人类智能的三个基本要素

人类智能的三个基本要素包括&#xff1a;适应性、灵活性和从稀疏观察中做出一般推断的能力。这些要素使得智能系统能够适应不同的环境和任务&#xff0c;处理多样性和复杂性&#xff0c;并从有限的信息中进行学习和推理&#xff0c;对于构建更强大和智能的人工智能系统至关重要…

ERROR: While executing gem ... (Gem::FilePermissionError)

sudo gem install -n /usr/local/bin cocoapodsERROR: While executing gem ... (Gem::FilePermissionError)You dont have write permissions for the /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/gems/2.6.0 directory.解决办法&#xff1a; 1.删…

limereport报表使用

在这里我使用报表是以报表的形式显示数据库的信息。所以首先需要准备的资料有&#xff1a;limereport源码&#xff0c;还有数据库&#xff0c;我这里使用的是qsqlite数据库。 1、下载limereport报表源码 2、运行自带的案例&#xff1a;demo_r1 3、点击 “Run Report Designer”…

【Spring专题】手写简易Spring容器过程分析——引导篇

目录 前言说在前面阅读准备 思路整理手写源码示例一、手写前的准备1.1 注解1.2 测试Bean1.3 调用实例 二、构造方法&#xff08;构建基本流程&#xff09;三、实现scan()方法3.1 doGetScanPackage()&#xff1a;获取扫描路径3.2 doLoadClassFromDiskAndScan()&#xff1a;从电脑…

HTML大于号、小于号、空格、引号等常用的转义代码写法

在这里插入代码片HTML 原始码 显示结果 描述 < < 小於号或显示标记 > > 大於号或显示标记 &amp; & 可用於显示其它特殊字符 &quot; " 引号 &reg; 己注册 © © 版权 &trade; ™ 商标 &ensp; 半…

dumpsys window

查询当前活动包名以及类名 adb shell dumpsys window | findstr mCurrentFocusdump出当前所有的窗口信息 adb shell dumpsys window windows

CNN的特性

1、位移不变性 它指的是无论物体在图像中的什么位置&#xff0c;卷积神经网络的识别结果都应该是一样的。 因为CNN就是利用一个kernel在整张图像上不断步进来完成卷积操作的&#xff0c;而且在这个过程中kernel的参数是共享的。换句话说&#xff0c;它其实就是拿了同一张“通…

Java 面试八股文

参考&#xff1a; 2023年 Java 面试八股文&#xff08;20w字&#xff09;_json解析失败_leader_song的博客-CSDN博客

MATLAB算法实战应用案例精讲-【深度学习】预训练模型-Transformer

目录 前言 2.Transformer直观认识 3. Transformer的结构 3.1 Embedding 3.1.1 Input Embedding 3.1.2 Position Encoding 3.2 Encoder

Java 8:Stream API 流式操作

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; Java 8&#xff1a;Stream API Java 8 中的 Stream API 是一组用于对集合数据进行处理的新特性&#xff1b;提供一种以声明式风格对集合进行操作的方式&#xff0c;简…

【深度学习 video detect】Towards High Performance Video Object Detection for Mobiles

文章目录 摘要IntroductionRevisiting Video Object Detection BaselinePractice for Mobiles Model Architecture for MobilesLight Flow 摘要 尽管在桌面GPU上取得了视频目标检测的最近成功&#xff0c;但其架构对于移动设备来说仍然过于沉重。目前尚不清楚在非常有限的计算…

QT的界面切换

QT的界面切换 步骤一: 创建一个新的 ui 界面

使用基于jvm-sandbox的对三层嵌套类型的改造

使用基于jvm-sandbox的对三层嵌套类型的改造 问题背景 先简单介绍下基于jvm-sandbox的imock工具&#xff0c;是Java方法级别的mock&#xff0c;操作就是监听指定方法&#xff0c;返回指定的mock内容。 jvm-sandbox 利用字节码操作和自定义类加载器的技术&#xff0c;将原始方法…

【JVM】CPU飙高排查方案与思路

文章目录 CPU飙高排查方案与思路 CPU飙高排查方案与思路 1.使用top命令查看占用cpu的情况 2.通过top命令查看后&#xff0c;可以查看是哪一个进程占用cpu较高&#xff0c;上图所示的进程为&#xff1a;40940 3.查看进程中的线程信息 4.可以根据进程 id 找到有问题的线程&a…