【Spring MVC篇】Cookie和Session的获取 Header的获取

个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【Spring MVC】
本专栏旨在分享学习Spring MVC的一点学习心得,欢迎大家在评论区交流讨论💌
在这里插入图片描述

Cookie是客户端保存用户信息的一种机制,Session服务器段保存用户信息的一种机制。Cookie和Session之间主要是通过SessionId关联起来的。

目录

  • 一、获取Cookie
    • 方式①
    • 方式②
  • 二、获取Session
    • 方式①
      • 存储Session
    • 方式②
    • 方式③
  • 三、获取Header
    • 方式②

一、获取Cookie

方式①

获取Cookie代码如下(使用Servlet API的方式):

@RequestMapping("/getCookie")
public String getCookie(HttpServletRequest request) {Cookie[] cookies = request.getCookies();if(cookies != null) {Arrays.stream(cookies).forEach(cookie -> {System.out.println(cookie.getName() + ":" + cookie.getValue());});}return "获取cookie成功";
}

注意:cookies一开始是空的,所以要加上if判断,演示结果如下:

在这里插入图片描述

下面来进行Cookie的伪造(F12进入开发者工具):
在这里插入图片描述
在这里插入图片描述

方式②

方式①是使用比较原始的方式(即Servlet API)来获取Cookie

现在我们重启服务器,来获取keyaaa的值:

代码如下:

@RequestMapping("/getCookie2")
public String getCookie2(@CookieValue String aaa) {return "cookie中aaa存储的值是:" + aaa;
}

在这里插入图片描述

上面的代码使用了Spring框架的@CookieValue注解来获取cookie的值。具体来说,@CookieValue注解作为方法的参数,会自动从请求中获取名为"aaa"的cookie的值,并赋给方法中的变量aaa。然后将该变量拼接到返回的字符串中,最终返回结果。

可以发现重启服务器之后仍然可以得到key为aaa中存储的值,这是因为Cookie是客户端保存用户信息的一种机制(即与浏览器有关,与服务器重启无关)

综上,Servlet API和Spring框架中的@CookieValue注解都可以获取Cookie;区别就是Servlet API可以获取请求中的所有cookie;而@CookieValue注解来直接从请求中获取指定cookie的值,将其赋给方法参数。

二、获取Session

在这里插入图片描述

方式①

使用Servlet API来获取Session,代码如下:

@RequestMapping("/getSession")
public String getSession(HttpServletRequest request) {// 服务器中每个会话都会创建一个SessionHttpSession session = request.getSession(false);// getSession根据Sessionid来获取对应的Session对象默认值为true// 当传入true时,如果请求中已经存在一个会话(即Session不为空),就返回该会话;如果没有会话(即Session为空),则创建一个新的会话并返回。// 当传入false时,如果请求中已经存在一个会话,就返回该会话;如果没有会话,则返回 null。if(session != null) {String name = (String)session.getAttribute("name");return "名称:" + name;}return "session为空";
}

结果如下:

Cookie中虽然有值,但是我们可以看到运行结果显示Session是空的(因为二者本身是没有关系的,但是可以通过Sessionid进行关联)。在这里插入图片描述
在这里插入图片描述

存储Session

Cookie和Session是通过Sessionid来进行关联的,由于Session是服务器端的,所以我们无法伪造Session,现在我们通过代码来存储Session(Session是服务器端的机制,我们需要先存储,才能再获取):

@RequestMapping("/setSession")
public String setSession(HttpServletRequest request) {HttpSession session = request.getSession();session.setAttribute("name","lisi");return "success";
}

结果如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如上图,在发起请求时,无论是否需要Cookie,请求中的信息都会包含Cookie信息。当服务器处理请求后,会返回响应给客户端。客户端在接收到响应后,会根据响应中包含的Set-Cookie头部字段解析和处理Cookie信息。浏览器会解析Set-Cookie头部字段,然后将Cookie保存到浏览器的Cookie存储中。

此时我们再次getSession,如下:
在这里插入图片描述

方式②

代码如下(使用了Spring MVC框架的@SessionAttribute注解来获取会话(session)中的属性值。):

@RequestMapping("/getSession2")
public String getSession2(@SessionAttribute String name) {return "name" + name;
}

我们重启服务器之后,Session就已经清空了,因为Session是存储在服务器上的(默认是存储在内存中的)。所以此时我们是拿不到数据的,请看:
在这里插入图片描述

在这里插入图片描述

重启服务器之后运行如下:
在这里插入图片描述

我们现在重新setSession:
在这里插入图片描述
然后getSession2:
在这里插入图片描述

方式③

使用Servlet API提供的HttpSession对象来获取会话(session)。

代码如下:

@RequestMapping("/getSession3")
public String getSession3(HttpSession session) {String name = (String)session.getAttribute("name");return "名称:" + name;
}

在这里插入图片描述

下面是运行结果的演示过程:
我们依然是要先setSession(因为重启了服务器):
在这里插入图片描述
然后getSession3:
在这里插入图片描述

这种方式是直接使用HttpSession对象来获取会话属性值,不需要借助注解或其他操作。

三、获取Header

使用Servlet API提供的HttpServletRequest对象来获取请求的Header信息(在方法参数中声明HttpServletRequest对象,通过Spring MVC会自动注入该对象。)。

代码如下:

@RequestMapping("/getHeader")
public String getHeader(HttpServletRequest request) {String userAgent = request.getHeader("User-Agent");return "User-Agent" + userAgent;
}

结果如下:
在这里插入图片描述

方式②

使用Spring MVC提供的@RequestHeader注解来获取请求的Header信息。

代码如下:

@RequestMapping("/getHeader2")
public String getHeader2(@RequestHeader("User-Agent") String userAgent) {return "User-Agent" + userAgent;
}

结果如下:

在这里插入图片描述
好了,以上就是本文的全部内容了。希望各位友友可以一键三连哈!!!

在这里插入图片描述

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

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

相关文章

基于Java (spring-boot)的职工管理系统

一、项目介绍 基于Java (spring-boot)的职工管理系统功能:登录、老板、职员人事经理、职员、部门列表、职工列表、权限修改、查看所有管理、正在审核列表、添加考勤、添加职工、添加奖惩、合同列表、合同信息、等等等。 适用人群:适合小白、大学生、毕业…

360网络安全面试题汇总

防范常见的 Web 攻击 重要协议分布层 arp 协议的工作原理 rip 协议是什么?rip 的工作原理 什么是 RARP?工作原理 OSPF 协议?OSPF 的工作原理 TCP 与 UDP 区别总结 什么是三次握手四次挥手? tcp 为什么要三次握手? dns…

Science重磅_让大模型像婴儿一样学习语言

英文名称: Grounded language acquisition through the eyes and ears of a single child 中文名称: 通过一个孩子的眼睛和耳朵基于实践学习语言 文章: https://www.science.org/doi/10.1126/science.adi1374 代码: https://github.com/wkvong/multimodalbaby 作者: Wai Keen V…

腾讯云4核8G服务器多少钱?轻量和CVM报价2024新版

腾讯云4核8G服务器S5和轻量应用服务器优惠价格表,轻量应用服务器和CVM云服务器均有活动,云服务器CVM标准型S5实例4核8G配置价格15个月1437.3元,5年6490.44元,标准型SA2服务器1444.8元一年,轻量应用服务器4核8G12M带宽一…

java之filter过滤器

1、概念 2、过程 3. 实现 4. 参考链接 参考的b站链接

【网工】华为设备命令学习(综合实验一)

实验要求和实验成果如图所示。 LSW2不需要其他配置&#xff0c;其下就一台设备&#xff0c;不需要区分。 LSW3配置如下&#xff1a; <Huawei>sy Enter system view, return user view with CtrlZ. [Huawei]un in en //关闭系统提示信息 Info: Information …

Java之拦截器interceptor

1. 概念 2. 步骤 第一步 第二步 参考资料 https://www.bilibili.com/video/BV1m84y1w7Tb?p168&vd_source705343a89f38d5c0d895383ccf38a5d6

Microsoft OneNote 图片文字提取

Microsoft OneNote 图片文字提取 1. 文件 -> 新建 -> 我的电脑 -> 名称 -> 位置 -> 创建笔记本2. 插入图片​​​3. 复制图片中的文本References 1. 文件 -> 新建 -> 我的电脑 -> 名称 -> 位置 -> 创建笔记本 ​ 2. 插入图片 ​​​3. 复制图片…

有趣儿的组件(HTML/CSS)

分享几个炫酷的组件&#xff0c;起飞~~ 评论区留爪&#xff0c;继续分享哦~ 文章目录 1. 按钮2. 输入3. 工具提示4. 单选按钮5. 加载中 1. 按钮 HTML&#xff1a; <button id"btn">Button</button>CSS&#xff1a; button {padding: 10px 20px;text-tr…

使用Docker快速部署MySQL

部署MySQL 使用Docker安装&#xff0c;仅仅需要一步即可&#xff0c;在命令行输入下面的命令 docker run -d \--name mysql \-p 3306:3306 \-e TZAsia/Shanghai \-e MYSQL_ROOT_PASSWORD123456 \mysql MySQL安装完毕&#xff01;通过任意客户端工具即可连接到MySQL. 当我们执…

计算机二级C语言的注意事项及相应真题-4-程序修改

目录&#xff1a; 31.逐个比较p、q所指两个字符串对应位置中的字符&#xff0c;把ASCII值大或相等的字符依次存放到c所指数组中&#xff0c;形成一个新的字符串32.求矩阵&#xff08;二维数组)a[N][N]中每行的最小值&#xff0c;结果存放到数组b中33.将一个十进制整数转换成r(二…

那些 C语言指针 你不知道的小秘密 (完结篇)

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 我会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人能…

【GO语言卵细胞级别教程】05.项目创建和函数讲解

感谢&#xff01;点点赞和评论呀&#xff01;我将继续更新 目录&#xff1a; 感谢&#xff01;点点赞和评论呀&#xff01;我将继续更新0.创建项目1.函数的引入2.注意事项3.详细介绍3.1 形参介绍 4.导入包4.1 基本知识4.2 注意事项 0.创建项目 创建目录 执行命令加载模块 cd 0…

【刷题记录】——时间复杂度

本系列博客为个人刷题思路分享&#xff0c;有需要借鉴即可。 1.目录大纲&#xff1a; 2.题目链接&#xff1a; T1&#xff1a;消失的数字&#xff1a;LINK T2&#xff1a;旋转数组&#xff1a;LINK 3.详解思路&#xff1a; T1&#xff1a; 思路1&#xff1a;先排序&#xf…

【python】print输出的格式化

在Python中&#xff0c;有几种方式来格式化prin函数的输出。以下是一些常见的方法&#xff1a; 1. 使用百分号 % 运算符&#xff08;传统方法&#xff09;: 使用 % 操作符来进行格式化是一种较老的方法&#xff0c;但它仍然有效。 name "Alice"age 25print("…

线性代数的本质 1 向量

向量是线性代数中最为基础的概念。 何为向量&#xff1f; 从物理上看&#xff0c; 向量就是既有大小又有方向的量&#xff0c;只要这两者一定&#xff0c;就可以在空间中随便移动。 从计算机应用的角度看&#xff0c;向量和列表很接近&#xff0c;可以用来描述某对象的几个不同…

【Java程序设计】【C00268】基于Springboot的CSGO赛事管理系统(有论文)

基于Springboot的CSGO赛事管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的赛事管理系统 本系统分为系统功能模块、管理员功能模块、参赛战队功能模块以及合作方功能模块。 系统功能模块&#xff1a;在系…

基于SpringBoot的助农产品采购平台

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

MySQL数据库⑨_事务(四个属性+回滚提交+隔离级别+MVCC)

目录 1. 事务的概念和四个属性 2. 事务的支持版本 3. 事务的提交方式 4. 事务的相关演示 4.1 常规操作_回滚_提交 4.2 原子性_演示 4.3 持久性_演示 4.4 begin自动更改提交方式 4.5 单条SQL与事务的关系 5. 事务的隔离级别 5.1 四种隔离级别 5.2 查看与设置隔离级别…

计算机毕业设计 | vue+SpringBoot选课管理系统(附源码)

1&#xff0c;绪论 1.1 开发背景 随着我国高等教育的发展&#xff0c;数字化校园将成为一种必然的趋势&#xff0c;国内高校迫切需要提高教育工作的质量与效率&#xff0c;学生成绩管理工作是高校信息管理工作的重要组成部分&#xff0c;与国外高校不同&#xff0c;他们一般具…