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

javaWeb个人学习02

会话技术

会话:

用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束.在一次会话中包含多次请求和响应

会话跟踪:

一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一个浏览器,以便在同一次会话的多次请求之间共享数据

会话跟踪方案:

客户端会话跟踪技术: Cookie
服务端会话跟踪技术: Session
令牌技术

会话跟踪方案的对比:

Cookie:

优点: HTTP协议中支持的技术
请求的时候(Cookie:name=value)
响应的时候 (Set-Cookie: name=value)
设置Cookie:

// 这里的response 是 HttpServletResponse类的
response.addCookie(new Cookie("CookieName", "CookieValue"));

获取Cookie:

// 这里的request 来自于HttpServletRequest 
Cookie[] cookies = request.getCookies(); // 获取所有的Cookie
// 遍历的时候 可以用foreach进行遍历
for(Cookie cookie : cookies)

缺点:
移动端APP无法使用Cookie
不安全,用户可以自己禁用Cookie
Cookie不能跨域

Session:

优点:储存在服务器端,安全

缺点:服务器集群环境下无法直接使用Session, 以及Cookie的缺点,因为Session的底层是基于Cookie实现的

往HttpSession中存储数据:

// session 是来自于HttpSession类里面的
session.setAttribute("name", "value"); // 往session中存储数据

从HttpSession中获取值:

// 这里的 request是来自于HttpServletRequest类里面的
HttpSession session = request.getSession();
Object t = session.getAttribute("name"); // 从session中获取数据

令牌技术(JWT):

 优点: 支持pc端,移动端,解决集群环境下的认证问题,减轻服务器端存储压力

 缺点:需要自己实现

简介:(JSON Web Token)

JWT以json数据格式安全的传输信息

组成:

第一部分:Header(头), 记录令牌类型, 签名算法
第二部分:Payload(有效载荷), 携带一些自定义信息 默认信息等
第三部分: Signature(签名), 防止Token被篡改,确保安全性, 将header payload 并加入指定密钥,通过指定签名算法计算而来

 生成:

先引入依赖:

设置 拿到jwt令牌

Map<String, Object> claims = new HashMao<>();
claims.put("id", 1);
claims.put("name", "Tom");String jwt = Jwts.builder()
//第一个参数是用的是什么算法 第二个参数是你自定义的密钥.signWith(SignatureAlgorithm.HS256, "FindYou");.setClaims(claims); // 自定义内容(载荷)// 下面这个设置的有效期是1小时后 注意是参数的单位是毫秒值.setExpiration(new Date(System.currentTimeMillis() + 3600 * 1000)); //设置有效期.compact();
 解析:

解析过期的令牌会发生异常

Claims claims = Jwts.parser().setSigningKey("FindYou") // 这个是你之前设置的密钥.parseClaimsJws("这里传的是你之前获得的jwt令牌 也就是一串字符串").getBody(); // 获得第二部分 也就是存储的对象信息

 注意事项:

过滤器(Filter)

概述:

代码演示:d

@WebFilter(urlPatterns = "/*") // 拦截的url
public class DemoFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("拦截到了");filterChain.doFilter(servletRequest, servletResponse); // 放行}
}

 在登录校验中 过滤器的用法思路:

代码:

@Slf4j
@WebFilter(urlPatterns = "/*") // 拦截的url
public class DemoFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest) servletRequest;HttpServletResponse resp = (HttpServletResponse) servletResponse;// 获取请求的urlString url = req.getRequestURL().toString();log.info("请求的url = {}", url);//判断url之中 是否有login 要是包含的话 直接放行if(url.contains("login")) {filterChain.doFilter(servletRequest, servletResponse); // 放行return;}// 获取请求头中的令牌String jwt = req.getHeader("token"); // 拿到令牌if(!StringUtils.hasLength(jwt)) { // 这样为空 或者是为null 就返回错误的信息log.info("请求头token为空");Result error = Result.error("NOT_LOGIN");// 将对象转换为json的数据String notLogin = JSONObject.toJSONString(error);// 转换为json格式的字符串resp.getWriter().write(notLogin); // 响应给浏览器return;}//解析tokentry {JwtsUtils.parseJWT(jwt);}catch (Exception e) { // 解析失败e.printStackTrace();log.info("解析令牌失败 返回未登录错误信息");Result error = Result.error("NOT_LOGIN");// 将对象转换为json的数据String notLogin = JSONObject.toJSONString(error);// 转换为json格式的字符串resp.getWriter().write(notLogin); // 响应给浏览器return;}// 放行filterChain.doFilter(servletRequest, servletResponse);}
}

相关文章:

javaWeb个人学习02

会话技术 会话: 用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束.在一次会话中包含多次请求和响应 会话跟踪: 一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一个浏览器,以便在同一次会话的多次请求之间共享数据 会话跟踪方案: …...

EchoServer回显服务器封装与测试

目录 类实现 编译测试 这一篇本质上是为了TcpServer而做的一层封装,让外界调用更加简洁 参考上文 TcpServer服务器管理模块(模块十)-CSDN博客 类实现 echo.hpp #include "../server.hpp"class EchoServer { private:TcpServer _server;private:void OnConnect…...

详解POCV/SOCV的时序报告

​POCV/SOCV的时序报告中有如下变量&#xff1a; Mean: 高斯分布中的μ值&#xff08;平均值&#xff09; Sensit: sensitivity&#xff0c;也就是1个Sigma的值&#xff1b; Corner: Sigma边界的最差值 cell的delay Delay mean N * Delay sigma; cell 的Transition Sl…...

[VNCTF2024]-PWN:preinit解析(逆向花指令,绕过strcmp,函数修改,机器码)

查看保护&#xff1a; 查看ida&#xff1a; 这边其实看反汇编没啥大作用&#xff0c;需要自己动调。 但是前面的绕过strcmp还是要看一下的。 解题&#xff1a; 这里是用linux自带的产生随机数的文件urandom来产生一个随机密码&#xff0c;然后让我们输入密码&#xff0c;用st…...

网络通信技术

▶1.分组交换技术 在网络通信中&#xff0c;数据通过网络节点的某种转发方式&#xff0c;实现从一个端系统到另一个端系统之间的数据传输技术称为数据交换技术。数据交换技术有电路交换、报文交换和分组交换&#xff0c;计算机网络采用分组交换技术。 分组就是源主机(如服务器…...

【刷题】位运算

消失的两个数字 消失的两个数字 “单身狗”进阶版思路 class Solution { public:vector<int> missingTwo(vector<int>& nums) {int ret 0;int n nums.size();for(int i 0; i < n; i){ret ^ (nums[i] ^ i);}ret ^ (n ^ (n 1) ^ (n 2));// 按位异或的…...

C++重新入门-string容器

目录 1.包含头文件 2.创建字符串 3.获取字符串长度 4.字符串拼接 5.字符串比较 相等性比较 大小比较 使用比较函数 6.访问字符串 7.查找子串 8.字符串修改 替换子串 插入字符或子串 删除字符或子串 9.提取子串 10.总结 当谈到C中的字符串时&#xff0c;std::str…...

C语言头歌:指针进阶

第1关&#xff1a;输出若干个学生成绩中的最高分.要求用指针函数实现 任务描述 题目描述:读入n(1 < n < 1000)个学生的成绩&#xff0c;成绩都为整数&#xff0c;用指针函数求出若干个学生成绩的最高分。用数组名作为函数参数&#xff0c;指针作为函数返回值。 ####相关…...

【C++】一个求数组中最大元素的函数模板

题目 设计一个分数类 F r a c t i o n Fraction Fraction&#xff0c;再设计一个名为 M a x e l e m e n t Max_element Maxe​lement 的函数模板&#xff0c;能够求数组中最大的元素&#xff0c;并用该模板求一个 F r a c t i o n Fraction Fraction 数组中的最大元素。 C…...

SpringCloud Alibaba(保姆级入门及操作)

第一章 微服务概念 1.0 科普一些术语 科普一下项目开发过程中常出现的术语,方便后续内容的理解。 **服务器:**分软件与硬件,软件:类型tomcat这种跑项目的程序, 硬件:用来部署项目的电脑(一般性能比个人电脑好) **服务:**操作系统上术语:一个程序,开发中术语:一个…...

SpringBoot集成Activiti案例

前言 Activiti项目是一项新的基于Apache许可的开源BPM平台&#xff0c;从基础开始构建&#xff0c;旨在提供支持新的BPMN 2.0标准&#xff0c;包括支持对象管理组&#xff08;OMG&#xff09;&#xff0c;面对新技术的机遇&#xff0c;诸如互操作性和云架构&#xff0c;提供技…...

Vulnhub靶机:basic_pentesting_2

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;10.0.2.4&#xff09; 靶机&#xff1a;basic_pentesting_2&#xff08;10.0.2.7&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://download.vulnhub.c…...

复试PAT乙级day33

PAT乙级1106~1110 1106_2019数列有一个测试点过不了 1109_擅长C 这题不会&#xff0c;通过的是别人的代码 1110_区块反转 这题跟1105_链表合并 的处理很像。值得注意的是分段区间翻转用 大转小转 的方式。这题也有一个测试点通不过。...

npm ERR! path /Users/apple/.npm/_cacache/index-v5/11/77/cf18d9ab54d565b57fb3

在使用npm时&#xff0c;有时候您可能会遇到类似以下错误的权限问题&#xff1a; npm ERR! path /Users/apple/.npm/_cacache/index-v5/11/77/cf18d9ab54d565b57fb3 npm ERR! code EACCES npm ERR! errno -13 npm ERR! syscall open npm ERR! Error: EACCES: permission denie…...

震惊!python类型的自动化测试框架原来这么简单!

自2018年被评选为编程语言以来&#xff0c;Python在各大排行榜上一直都是名列前茅。目前&#xff0c;它在Tiobe指数中排名第三个&#xff0c;仅次于Java和C。随着该编程语言的广泛使用&#xff0c;基于Python的自动化测试框架也应运而生&#xff0c;且不断发展与丰富。 因此&am…...

人脸高清算法GFPGAN之TensorRT推理

1. 综述 最近由于做数字人项目&#xff0c;采用的是wav2lip GFPGAN进行人脸面部高清&#xff0c;但GFPGAN模型本身比较大&#xff0c;所以想着使用TensorRT来代替原始的pth推理看看能否提升运行速度&#xff0c;于是便开始了这趟windows1之下进行GFPGAN的trt推理的折腾之旅。…...

05 OpenCV图像混合技术

文章目录 理论算子示例 理论 其中 的取值范围为0~1之间 算子 addWeighted CV_EXPORTS_W void addWeighted(InputArray src1, double alpha, InputArray src2, double beta,double gamma, OutputArray dst, int dtype -1 ); 参数1&#xff1a;输入图像Mat …...

2326. 王者之剑(网络流,最小割,最大权独立集,最小点权覆盖)

活动 - AcWing 给出一个 nm 网格&#xff0c;每个格子上有一个价值 vi,j 的宝石。 Amber 可以自己决定起点&#xff0c;开始时刻为第 0 秒。 以下操作&#xff0c;在每秒内按顺序执行。 若第 i 秒开始时&#xff0c;Amber 在 (x,y)&#xff0c;则 Amber 可以拿走 (x,y) 上的…...

内网信息搜集

目录 内网基础知识 基本流程图 怎么判断是否在域内 常规信息类收集-应用&服务&权限等 cs信息搜集 bloodhound安装及使用 内网基础知识 工作组&#xff1a;将不同的计算机按照功能分别列入不同的组&#xff0c;想要访问某个部门的资源&#xff0c;只要在【网络】里…...

微型力量,巨大作用:嵌入式技术的创新应用

微型力量&#xff0c;巨大作用&#xff1a;嵌入式技术的创新应用 嵌入式技术是一种将计算机技术嵌入到各种设备和系统中的技术&#xff0c;它的应用范围非常广泛&#xff0c;包括但不限于智能手机、智能家居、医疗设备、工业自动化等领域。这种微型的技术在各个领域中发挥着巨…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

k8s从入门到放弃之HPA控制器

k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率&#xff08;或其他自定义指标&#xff09;来调整这些对象的规模&#xff0c;从而帮助应用程序在负…...