首页/新闻资讯/正文详情

Spring MVC 获取 Cookie、Session 与 Header 详解

发布时间:2026/9/26 9:17:55 来源:云帆数科 栏目:资讯中心
Spring MVC 获取 Cookie、Session 与 Header 详解
一、前言为什么需要 Cookie 与 SessionHTTP 协议本身是无状态的即客户端与服务器之间的每次通信都是独立的服务器无法默认识别两次请求是否来自同一用户。但是在实际开发中我们往往需要知道请求之间的关联关系例如用户登录后第二次访问时服务器要能识别出该用户已登录。解决办法就是使用Cookie与SessionCookie客户端保存用户信息的机制。Session服务器端保存用户信息的机制。两者通过SessionId关联SessionId 通常存储在 Cookie 中。二、理解 Session会话一个客户端与服务器之间的不中断的请求响应过程。服务器能识别出请求是否来自同一客户端。服务器同一时刻收到大量请求需要区分每个请求属于哪个用户哪个会话因此需要在服务器端记录每个会话与用户信息的对应关系。Session本质是一个哈希表键值对结构KeySessionId服务器生成的唯一性字符串Value用户信息可灵活设计Session 工作流程用户登录时服务器在 Session 中新增记录并通过 HTTP 响应中的Set-Cookie字段将SessionId返回给客户端。客户端后续请求时通过 HTTP 请求中的Cookie字段带上SessionId。服务器收到请求后根据 SessionId 在 Session 中获取对应用户信息再进行后续操作。找不到则重新创建 Session 并返回新的 SessionId。注意Session 默认保存在内存中重启服务器会导致 Session 数据丢失。三、Cookie 与 Session 的区别对比项CookieSession保存位置客户端服务器端关联方式通过 SessionId 关联通过 SessionId 关联是否必须配合不是必须可单独使用不是必须SessionId 可通过 URL 传递安全性可伪造不安全相对安全Cookie 和 Session 经常配合使用但不是必须。Cookie 可以保存一些非身份信息的数据。SessionId 也可以通过 URL 传递不一定非要通过 Cookie/Set-Cookie。四、获取 Cookie4.1 传统方式使用 HttpServletRequestSpring MVC 基于 Servlet API 构建HttpServletRequest和HttpServletResponse是内置对象直接在方法中添加声明即可使用。RequestMapping(/m10) public String method10(HttpServletRequest request, HttpServletResponse response) { // 获取所有 cookie 信息 Cookie[] cookies request.getCookies(); // 打印 Cookie 信息 StringBuilder builder new StringBuilder(); if (cookies ! null) { for (Cookie ck : cookies) { builder.append(ck.getName() : ck.getValue()); } } return Cookie信息: builder; }HttpServletRequest代表客户端请求封装了所有请求信息。HttpServletResponse代表服务器响应封装了所有响应信息。4.2 简洁方式使用 CookieValue 注解RequestMapping(/getCookie) public String cookie(CookieValue(bite) String lss) { return lss lss; }访问http://127.0.0.1:8080/param/getCookie即可直接获取指定名称的 Cookie 值。五、获取 SessionSession 是服务器端机制需要先存储再获取基于HttpServletRequest操作。5.1 Session 存储RequestMapping(/setSess) public String setsess(HttpServletRequest request) { // 获取 Session 对象 HttpSession session request.getSession(); if (session ! null) { session.setAttribute(username, java); } return session 存储成功; }getSession()内部会提取请求 Cookie 中的 SessionId根据 SessionId 获取对应 Session 对象。两种获取方式HttpSession getSession(boolean create)参数为true时不存在则新建为false时不存在返回null。HttpSession getSession()等价于getSession(true)默认新建。void setAttribute(String name, Object value)绑定对象到 Session。5.2 Session 读取RequestMapping(/getSess) public String sess(HttpServletRequest request) { // 如果 session 不存在不会自动创建 HttpSession session request.getSession(false); String username null; if (session ! null session.getAttribute(username) ! null) { username (String) session.getAttribute(username); } return username username; }Object getAttribute(String name)返回指定名称的对象不存在返回null。运行观察先访问http://127.0.0.1:8080/param/setSess通过 Fiddler 可看到响应中Set-Cookie告知客户端存储 SessionId。再访问http://127.0.0.1:8080/param/getSess请求中通过 Cookie 传递 SessionId。5.3 简洁获取 Session方式一SessionAttributeRequestMapping(/getSess2) public String sess2(SessionAttribute(value username, required false) String username) { return username username; }访问http://127.0.0.1:8080/param/getSess2。5.4 简洁获取 Session方式二HttpSession 内置对象javaRequestMapping(/getSess3) public String sess3(HttpSession session) { String username (String) session.getAttribute(username); return username username; }Session 不存在时会自动创建。访问http://127.0.0.1:8080/param/getSess3。六、获取 Header6.1 传统方式HttpServletRequest.getHeaderRequestMapping(/param10) public String param10(HttpServletRequest request, HttpServletResponse response) { String userAgent request.getHeader(User-Agent); return name userAgent; }使用getHeader方法参数对应 HTTP 请求报头的 Key。访问http://127.0.0.1:8080/param/getHeader可通过 Fiddler 验证 User-Agent 是否正确。6.2 简洁方式RequestHeader 注解javaRequestMapping(/header) public String header(RequestHeader(User-Agent) String userAgent) { return userAgent userAgent; }RequestHeader注解的参数值为 HTTP 请求报头中的 Key。访问http://127.0.0.1:8080/param/getHeader2。

相关推荐

api-ms-win-crt-runtime-l1-1-0.dll报错本质与五层修复方案
api-ms-win-crt-runtime-l1-1-0.dll报错本质与五层修复方案

1. 这个DLL报错到底在喊什么:从Windows系统底层看api-ms-win-crt-runtime-l1-1-0.dll的本质 你双击一个程序,弹出红色对话框:“无法启动此程序,因为计算机中丢失 api-ms-win-crt-runtime-l1-1-0.dll。尝试重新安装该程序。”——这… · 2026/9/26 9:17:55

Ubuntu虚拟机共享文件夹实战:vmhgfs-fuse配置与GNOME兼容方案
Ubuntu虚拟机共享文件夹实战:vmhgfs-fuse配置与GNOME兼容方案

1. 为什么共享文件夹是Ubuntu虚拟机里最常卡住的“第一道门”刚装好Ubuntu虚拟机,想把Windows桌面上那份项目文档拖进Linux终端里编译,结果双击“VMware Tools”图标没反应,点“设置→选项→共享文件夹”发现灰色不可用,或者手动挂… · 2026/9/26 9:17:55

LibreChat开源多模型聊天平台部署指南:从Docker到Ollama接入
LibreChat开源多模型聊天平台部署指南:从Docker到Ollama接入

前阵子想找一个能同时管理 OpenAI、Claude 和本地 Ollama 模型的开源面板,翻来翻去,最后停在 LibreChat 这个项目上。一开始我以为它只是个换皮的大模型客户端,用下来才发现,它把账号体系、会话管理、工具调用这类容易让人头疼的东… · 2026/9/26 9:17:55

SST固态变压器技术漫谈【5】采样、驱动与保护系统设计
SST固态变压器技术漫谈【5】采样、驱动与保护系统设计

模块五 采样、驱动与保护系统完整设计 摘要:本章围绕 10 kV / 1 MVA 固态变压器(SST)的采样、驱动与保护三大子系统展开完整设计。采样体系覆盖 16 类关键信号,强调多通道同步采样(偏差 ≤1 μs)与五层抗干扰设计;驱动电路聚焦 SiC/IGBT 的防误导通、驱动电阻匹配与串扰… · 2026/9/26 11:10:59

SST固态变压器技术漫谈【6】PCB、结构与绝缘散热专项设计要点
SST固态变压器技术漫谈【6】PCB、结构与绝缘散热专项设计要点

模块六 PCB、结构与绝缘散热专项设计 摘要:本模块围绕 SST(固态变压器)的工程化落地,系统讲解高压 PCB 布局、爬电与电气间隙、高频散热、高压绝缘工艺及结构工况适配五大专项。核心要点:① 功率回路最小化是第一优先级,用叠层母排把回路电感压到 100 nH 以内;② 高压与… · 2026/9/26 11:10:59

窗口管理程序
窗口管理程序

窗口管理程序(CKGL) 点此下载最新版本(蓝奏云盘)密码:CKGL 点此前往GitCode下载 点此前往GitHub下载 以下是v1.26.09.23部分界面截图 上方界面点击“更改样式”按钮可以进入下方界面 此程序由DEFCONG编写 点此下载最新版本(蓝奏云盘)密码:CKGL · 2026/9/26 11:10:59

Qt — 布局管理器
Qt — 布局管理器

目录 1. 垂直布局 2. 水平布局 3. 网格布局 4. 表单布局(行为N,列固定为2) 5. Spacer 之前使⽤ Qt 在界⾯上创建的控件, 都是通过 "绝对定位 (手动)" 的⽅式来设定的. 也就是每个控件所在的位置, 都需要计算坐标, 最终通过 se… · 2026/9/26 11:10:59

第1章:开发环境搭建,安装乌班图系统
第1章:开发环境搭建,安装乌班图系统

专栏导航 上一篇:第1章:开发环境搭建,安装 VMware 虚拟机 回到目录 下一篇:第1章:了解乌班图环境,命令行中的提示文字 本节前言 对于本节所讲解的知识,有可能,你会需要时不时地参… · 2026/9/26 11:10:59

【STM32开源项目】智能家用垃圾桶
【STM32开源项目】智能家用垃圾桶

目录 一、项目概述 二、实现功能 1、功能详解: 2、项目清单: 3、演示视频: 三、硬件介绍 PCB硬件设计: 四、程序设计 五、项目成品效果图 六、项目总结 七、包含资料 一、项目概述 本项目基于STM32F103C8T6单片机&… · 2026/9/26 11:10:53

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码