【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) {
    // 服务器中每个会话都会创建一个Session
    HttpSession 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.mfbz.cn/a/385785.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue--》深入学习Tailwind CSS掌握优雅而高效的前端样式开发

Tailwind CSS是一个非常强大且灵活的CSS框架,适用于开发者希望高度定制化界面样式的项目。今天博主就 Tailwind CSS 做一个简单介绍以及案例讲解,争取读者阅读文章后入门。 仅靠一篇文章博主也不可能将Tailwind CSS所有内容讲解的面面俱到,在…

算法学习——LeetCode力扣二叉树篇5

算法学习——LeetCode力扣二叉树篇5 513. 找树左下角的值 513. 找树左下角的值 - 力扣(LeetCode) 描述 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 示例 1: 输入: r…

CorelDRAW2024国内专业个人免费版下载

CorelDRAW是一款屡获殊荣的图形和图像编辑软件,包含两个绘图应用程序:一个用于矢量图及页面设计,另一个用于图像编辑。自1989年进入中国市场以来,CorelDRAW不断推出新的版本和功能,以满足用户不断变化的需求。 CorelD…

力扣面试题 16.21. 交换和(哈希表)

Problem: 面试题 16.21. 交换和 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.分别求取array1与array2数组每一个元素的和(sum1与sum2)并同时将array2的元素存入一个set集合中; 2.如果sum1和sum2的和为奇数,则不…

Redis相关介绍

概念 Redis:非关系型数据库(non-relational),Mysql是关系型数据库(RDBMS) Redis是当今非常流行的基于KV结构的作为Cache使用的NoSQL数据库 为什么使用NoSQL 关系型 数据库无法应对每秒上万次 的读写请求 表中的存储记录 数量有限 无法简单…

【JavaEE】_JavaScript基础语法

目录 1. JavaScript概述 1.1 JavaScript简介 1.2 HTML、CSS、JavaScript的关系 1.3 JavaScrip的组成 2. JavaScript的书写形式 2.1 内嵌式 2.2 行内式 2.3 外部式 3. 输出 3.1 alert 3.2 console.log 4. 变量的使用 4.1 创建变量 4.1.1 使用var 4.1.2 使用let …

幻兽帕鲁Palworld专用服务器CPU内存配置怎么选择?

腾讯云幻兽帕鲁服务器配置怎么选?根据玩家数量选择CPU内存配置,4到8人选择4核16G、10到20人玩家选择8核32G、2到4人选择4核8G、32人选择16核64G配置,腾讯云百科txybk.com来详细说下腾讯云幻兽帕鲁专用服务器CPU内存带宽配置选择方法&#xff…

面试经典150题——无重复字符的最长子串

我生来就是高山而非溪流,我欲于群峰之巅俯视平庸的沟壑 1. 题目描述 2. 题目分析与解析 2.1 思路一——暴力解法 看到这个题目,我们是不是发现和上一篇内容刚刚讲过的长度最小的子数组题目很像?首先自然的暴力解法,就是遍历字符…

Java基于SpringBoot+vue的租房网站,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

119.乐理基础-五线谱-五线谱的标记

内容参考于:三分钟音乐社 上一个内容:音值组合法(二) 力度记号:简谱里什么意思,五线谱也完全是什么意思,p越多就越弱,f越多就越强,然后这些渐强、渐弱、sf、fp这些标记…

探索设计模式的魅力:捕捉变化的风-用观察者模式提升用户体验

设计模式专栏:http://t.csdnimg.cn/U54zu 目录 一、引言 核心概念 应用场景 可以解决的问题 二、场景案例 2.1 不用设计模式实现 2.2 存在问题 2.3 使用设计模式实现 2.4 成功克服 三、工作原理 3.1 结构图和说明 3.2 工作原理详解 3.3 实现步骤 四、 优…

算法-----高精度算法1(高精度加法,高精度减法)(详解)

什么是高精度算法? 高精度的意思就是他得名字----高的精度,简单说就是位数很大,而高精度算法就是将这些高精度数(位数很大在几百几千几万位的数叫高精度数)通过计算机的型式模拟出来结果。 为什么要用高精度算法&…

《Java 简易速速上手小册》第5章:Java 开发工具和框架(2024 最新版)

文章目录 5.1 Maven 和 Gradle - 构建你的堡垒5.1.1 基础知识5.1.2 重点案例:使用 Maven 构建一个简单的 Java 应用5.1.3 拓展案例 1:使用 Gradle 构建一个 Spring Boot 应用5.1.4 拓展案例 2:使用 Maven 管理多模块项目 5.2 Spring 框架 - 你…

CSS介绍

本章目标: CSS概述 三种样式表 简单选择器 复合选择器 盒子模型 常用背景样式 浮动 常用文本样式 伪类样式 列表样式 表格样式 定位 一、CSS概述: CSS:cascading style sheets-层叠样式表 专门负责对网页的美化 二、有三种使用方式&…

JavaScript中的常见算法

一.排序算法 1.冒泡排序 冒泡排序比较所有相邻的两个项&#xff0c;如果第一个比第二个大&#xff0c;则交换它们。元素项向上移动至 正确的顺序&#xff0c;就好像气泡升至表面一样。 function bubbleSort(arr) {const { length } arrfor (let i 0; i < length - 1; i)…

leetcode:55.跳跃游戏

1.解题思路&#xff1a;贪心算法看最大覆盖范围 2.模拟过程&#xff1a; 1.若数组长度等于1&#xff0c;直接返回True 2.循环遍历覆盖范围&#xff0c;选取最大的覆盖范围&#xff1b;若覆盖范围覆盖到了最后一个元素&#xff0c;直接返回true. 3.代码&#xff1a;(贪心无套…

【医学大模型 知识增强】SMedBERT:结构化语义知识 + 医学大模型 = 显著提升大模型医学文本挖掘性能

SMedBERT&#xff1a;结构化语义知识 医学大模型 显著提升医学文本挖掘任务性能 名词解释结构化语义知识预训练语言模型医学文本挖掘任务 提出背景具体步骤提及-邻居混合注意力机制实体嵌入增强实体描述增强三元组句子增强 提及-邻居上下文建模域内词汇权重学习领域自监督任务…

Servlet JSP-Eclipse安装配置Maven插件

Maven 是一款比较常用的 Java 开发拓展包&#xff0c;它相当于一个全自动 jar 包管理器&#xff0c;会导入用户开发时需要使用的相应 jar 包。使用 Maven 开发 Java 程序&#xff0c;可以极大提升开发者的开发效率。下面我就跟大家介绍一下如何在 Eclipse 里安装和配置 Maven 插…

基于STM32与FreeRTOS的四轴机械臂项目

目录 一、项目介绍 二、前期准备 1.硬件准备 2.开发环境 3.CubeMX配置 三、裸机各种模块测试 1.舵机模块 2.蓝牙模块 3.按键摇杆传感器模块和旋钮电位器模块 4.OLED模块 5.W25Q128模块 四、裸机三种控制测试 1.摇杆控制 2.示教器控制 3.蓝牙控制 五、裸机与Free…

MATLAB 1:基础知识

MATLAB中的数据类型主要包括数值类型、逻辑类型、字符串、函数句柄、结构体和单元数组类型。这六种基本的数据类型都是按照数组形式存储和操作的。 MATLAB中还有两种用于高级交叉编程的数据类型&#xff0c;分别是用户自定义的面向对象的用户类类型和Java类类型。 1.1.1数值类…