【JavaEE】_Spring MVC项目获取Cookie

目录

1. Cookie与Session基础知识

1.1 Cookie与Session的区别

2. 使用servlet原生方法获取Cookie

2.2 关于λ表达式遍历法的空指针问题

2.3 Cookie的伪造

3. 使用Spring注解获取Cookie

3.1 获取单个Cookie

3.2 获取多个Cookie


1. Cookie与Session基础知识

在本专栏HTTP请求与响应部分已经提到过关于报头Cookie的基本知识,原文链接如下:

【JavaEE】_HTTP请求报头header-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_63299495/article/details/136140202此处仅作以简单概括:

1. HTTP是无状态的,即没有记忆功能。

无状态的含义是:默认情况下HTTP协议的客户端和服务器之间的这次通信和下次通信之间没有直接的联系。

无论请求的时机如何,只要请求的参数相同,其处理的逻辑是一样的(不是数据一样),得到的结果也是一样的。

2. 但在实际开发中,有时需要明确请求与请求之间的联系,比如登录过后,第二次登录时服务器就知道该客户端是否已经登录过了;

Cookie与Session就是用于实现部分内容的记忆。

1.1 Cookie与Session的区别

(1)Cookie客户端保存用户信息的一种机制,Session服务器保存用户信息的一种机制;

(2)Cookie和Session之间主要是通过SessionId关联起来的,SessionId是Cookie和Session之间的桥梁;

(3)Cookie和Session经常会在一起配合使用,但并不是必须配合:

① 完全可以用Cookie来保存一些数据在客户端,这些数据不一定是用户身份信息,也不一定是SessionId;

② Session中的sessionId也不需要非得通过Cookie / Set-Cookie传递,比如通过URL传递;

2. 使用servlet原生方法获取Cookie

package com.example.demo.controller;import com.example.demo.Person;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;@RequestMapping("/Para")
@RestController
public class ParaController {@RequestMapping("/getCookie")public String getCookie(HttpServletRequest request, HttpServletResponse response){Cookie[] cookies = request.getCookies();   //获取Cookie对象for (Cookie cookie : cookies) {System.out.println(cookie.getName()+": "+cookie.getValue());}}
}

注:HttpServletRequest和HttpServletResponse在Servlet部分也曾使用过,Spring是基于Servlet实现的。

HttpServletRequest和HttpServletResponse是Spring的内置对象,需要使用时加上声明即可

2.2 关于λ表达式遍历法的空指针问题

对于遍历Cookies逐个获取到cookie对象时,可以使用λ表达式:

    @RequestMapping("getCookie")public String getCookie(HttpServletRequest request, HttpServletResponse response){Arrays.stream(cookies).forEach(cookie->{System.out.println(cookie.getName()+": "+cookie.getValue());});return "Cookies accepted successfully";}

现使用浏览器构造HTTP请求访问:

可见错误码500,表示服务器内部错误;

查看服务器日志:

对应修改75行代码消除空指针异常:

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

此时再重新启动,使用浏览器访问:

可见此时服务器接收cookie成功,只是由于当前cookie为空,故而没有显示cookie内容;

2.3 Cookie的伪造

在Chrome页面按F12调出控制台,进行如下操作:

此时刷新浏览器页面,回到服务器端查看服务器日志:

3. 使用Spring注解获取Cookie

1. 使用Spring获取Cookie需要使用注解@CookieValue

2. 注意Cookie是客户端保存信息的机制,与浏览器有关。

重启服务器后,在上例中设置的cookie仍然存在;

3.1 获取单个Cookie

.java文件内容如下:

package com.example.demo.controller;import com.example.demo.Person;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;@RequestMapping("/Para")
@RestController
public class ParaController {@RequestMapping("/getCookie2")public String getCookie(@CookieValue String aaa){return "CookieName: aaa "+"CookieValue: "+ aaa;}
}

重新启动服务器,根据URL访问,客户端页面如下:

可见Cookie获取成功;

3.2 获取多个Cookie

.java文件内方法修改如下:

    @RequestMapping("/getCookie2")public String getCookie(@CookieValue String aaa, @CookieValue String bbbb){return "CookieName: aaa "+"CookieValue: "+ aaa+"\n"+"CookieName: bbbb "+"CookieValue: "+ bbbb;}

重新启动运行并刷新浏览器:

 

注意在使用Servlet原生方法获取cookie时,获取到的是所有的cookie

使用spring注解@CookieValue获取cookie,只能逐个获取cookie

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

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

相关文章

CICD流水线 发布公用jar到maven私仓

3.1 发布公用jar到Maven私仓 1.选择流水线 2.新建流水线 3.选择模版 4.选择代码仓库 5. 调整构建命令 6.新增一个新阶段为 ”发送通知“,这里以邮件通知为例,保存之后,运行该流水线,对应jar就会自动发到我们私仓,并之…

中药配方颗粒备案信息数据库<2.5W+备案>

中药配方颗粒备案信息是指中药配方颗粒生产企业向国家药品监督管理局申报备案的相关信息。备案信息包括中药配方颗粒的名称、备案号、备案时间、备案状态、生产企业、生产地址、规格、包装、执行标准、保质期、不良反应检测、备案省局等信息。 通过对中药配方颗粒备案信息的查…

【Linux】正则表达式实验操作实例

正则表达式是一种强大的工具,用于在文本中查找、匹配和替换特定的字符串模式。 实验目的 掌握正则表达式的表达方式掌握grep/egrep命令的用法掌握sed 命令的用法掌握awk命令的用法 正则表达式 实验目的实验内容实验过程创建grep文件来进行如下操作用sed命令完成下列…

春招-实战项目冲刺直播课

春招-实战项目冲刺直播课 CCtalk 丰富多元的综合内容平台-专业的知识分享与在线教育平台https://www.cctalk.com/m/group/91161801

蓝桥杯刷题-13-子矩阵-二维滑动窗口 ಥ_ಥ

给定一个 n m (n 行 m 列)的矩阵。 设一个矩阵的价值为其所有数中的最大值和最小值的乘积。求给定矩阵的所有大小为 a b (a 行 b 列)的子矩阵的价值的和。 答案可能很大,你只需要输出答案对 998244353 取模后的结果。…

Redis 常见面试题

目录 1. Redis是什么?2. Redis优缺点?3. Redis为什么这么快?4. 既然Redis那么快,为什么不用它做主数据库,只用它做缓存?5. Redis的线程模型?6. Redis 采用单线程为什么还这么快?7. R…

Linux——静态库 共享库

1.库文件 1).库文件 库是一组预先编译好的方法的集合; Linux系统存储库的位置一般在/lib 和 /usr/lib (64位系统/usr/lib64) 库的头文件放在/usr/include 2).库的分类 静态库:libxxx.a(命名规则) 共享库:libxxx.so(命名规则) 3).准备文件: //add.c int add(int x,int y) { re…

vue结合Elempent-Plus/UI穿梭框更改宽度以及悬浮文本显示

由于分辨率不同会导致文本内容显示不全,如下所示: 因此需要 1、悬浮到对应行上出现悬浮信息 实现代码如下所示: 这里只演示Vue3版本代码,Vue2版本不再演示 区别就在插槽使用上Vue3使用:#default“”;Vu…

vitepress系列-04-规整sideBar左侧菜单导航

规整左侧菜单导航 新建navConfig.ts 文件用来管理左侧导航菜单: 将于其他的配置分开,避免config.mts太大 在config目录下,新建 sidebarModules文件目录用来左侧导航菜单 按模块进行分类: 在config下新建sidebarConfig.ts文件&…

【随笔】Git 高级篇 -- 整理提交记录(上)cherry-pick(十五)

💌 所属专栏:【Git】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…

书生·浦语大模型 第二节:Demo实践

书生浦语大模型 第二节:Demo实践 视频链接:Demo实践视频 文档链接:教程文档 一、实践内容: 部署InternLM2-Chat-1.8B模型进行智能对话部署实战营优秀作品 八戒-Chat-1.8B 模型通过 InternLM2-Chat-7B 运行 Lagent 智能体 Demo…

C++分析程序各模块耗时-perf火焰图

C分析程序各模块耗时-perf火焰图 1. 简介2. 安装3. 测试示例4. 从火焰图可以获得的信息5. 生成火焰图常见问题 Reference: Perf Wiki【性能】perf 火焰图分析软件性能瓶颈【火焰图🔥】Linux C/C性能优化分析工具Perf使用教程 perf: Linux profiling with perform…

POLY - Survival Melee Weapons

一个轻便、有趣且灵活的低多边形资源包,非常适合原型设计或添加到低多边形世界中。超过50种近战武器、刀、斧、棍棒、棍棒等。 此套餐非常适合第三人称或自上而下的观看。 除此之外,资产还包括开发生存游戏可能需要的任何细节。 整个包是以多边形风格创建的,可以与其他多边…

分类预测 | Matlab实现GWO-LSSVM灰狼算法优化最小二乘支持向量机数据分类预测

分类预测 | Matlab实现GWO-LSSVM灰狼算法优化最小二乘支持向量机数据分类预测 目录 分类预测 | Matlab实现GWO-LSSVM灰狼算法优化最小二乘支持向量机数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现GWO-LSSVM灰狼算法优化最小二乘支持向量机数据…

消费增值:革新你的消费观念,让每一分钱都充满无限可能

你是否曾感叹,每次消费都如同流水般逝去,钱就这样无声无息地消失?今天,我要为你揭示一种革新性的消费观念——消费增值。这不仅仅满足你的日常需求,更能让你的每一分钱都如同种子般,在未来开出绚烂的花朵&a…

从细节讲解单轴测径仪系列!

摘要:单轴测径仪是从一个方向对产品外径进行在线检测的设备,应用于各种线缆电缆、橡胶塑料、金属管、纸管、丝等的生产线。 关键词:单轴测径仪,测径仪,在线测径仪 引言 在各种产品的生产线上,外径的测量通过使用测径仪已实现了高精…

聚焦行业技术云隆机械将莅临2024第13届生物发酵展

参展企业介绍 上海云隆机械有限公司本公司主要经营制造:板式杀菌系列、管式杀菌系列、CIP清洗系统、胶体磨系列、分散乳化机系列、容积式转子泵和高压均质机序列设备。承接设计:乳制品、果汁饮料、蜂产品、冰淇淋、调味品、矿泉水、纯净水等食品工程项目…

07 | Swoole 源码分析之 Channel 通道模块

原文首发链接:Swoole 源码分析之 Channel 通道模块 大家好,我是码农先森。 引言 通道,用于协程间通讯,支持多生产者协程和多消费者协程。底层自动实现了协程的切换和调度。 通道与 PHP 的 Array 类似,仅占用内存&am…

Open3D (C++) 计算点云的特征值特征向量

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 针对整个点云 P = { p i } i

华为USG6000v

1、安全区域 一个及或多个接口的集合 默认的安全区域 Trust --- 优先级85,一般连接内网 Untrust --- 优先级5, 一般连接外网 Dmz --- 优先级50,一般连接服务器、 Local --- 优先级100,防火墙接口所在区的区域 2…