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

【Spring】获取Cookie和Session(@CookieValue()和@SessionAttribute())

获取 Cookie

传统获取 Cookie

这是没有 Spring 的时候,用 Servlet 来获取(获取所有的 Cookie)

  • Spring MVC 是基于 Servlet API 构建的原始 Web 框架,也是在 Servlet 的基础上实现的
@RequestMapping("/getcookie")  
public String getCookie(HttpServletRequest request, HttpServletResponse response) {  //String name = request.getParameter("name");  Cookie cookies[] = request.getCookies();  if (cookies != null) {  //将 Cookie 转成了数据流,然后进行循环  Arrays.stream(cookies).forEach(ck -> System.out.println(ck.getName() + ":" + ck.getValue()));  }  return "获取Cookie成功";  
}
  • HttpServletRequest 代表 HTTP 的请求,HTTP 请求里面有什么,这个对象里面就有什么
  • HttpServletResponse 代表 HTTP 的响应,HTTP 响应里面有什么,这个对象里面就有什么
    这两个对象属于 Spring 的内置对象,需要就加上,不用就不用写

Cookie 是一个数组,所以进行循环打印


进入网页后,Cookie 可以直接进行修改(F12)。然后在里面添加信息,name=bitevalue=666,随后保存 image.png|447

之后刷新,可在服务端看到 Cookie 信息 image.png

  • Spring MVC 是基于 Servlet API 构建的原始 Web 框架,也是在 Servlet 的基础上实现的
  • HttpServletRequestHttpServletResponseServlet 提供的两个类,是 Spring MVC 方法的内置对象,需要时直接在方法中添加声明即可
  • HttpServletRequest 对象代表客户端的请求,当客户端通过 HTTP 协议访问服务器时,HTTP 请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息
  • HttpServletResponse 对象代表服务器的响应。HTTP 响应的信息都在这个对象中,比如向客户端发送的数据,响应头,状态码等。通过这个对象提供的方法,可以获得服务器响应的所以内容
  • Spring MVC 在这两个对象的基础上进行封装,给我们提供更加简单的使用方法

简洁获取 Cookie(注解)

Spring MVC 在这两个对象的基础上进行封装,给我们提供更加简单的使用方法
上面获取的话,就是获取的所有的 Cookie,而如果想要获取某个 Cookie,就需要使用 @CookieValue

@RequestMapping("/getcookie2")  
public String getCookie2(@CookieValue("bite") String bite) {  return "从Cookie中获取值, bite:"+bite;  
}

@CookieValue 里面的值,就是你要获取的 Cookie image.png|448

获取 Session

Session 存储和获取

传统方式也是用 Servlet 进行实现的

@RequestMapping("/getsession")  
public String getsession(HttpServletRequest request) {  //从 Cookie 中获取到了 SessionId,根据 Session 获取 Session对象  HttpSession session = request.getSession();  String name = (String) session.getAttribute("name");  return "从session中获取name:"+name;  
}
  • 第四行是从 Cookie 中获取到 SessionId,然后根据 SessionId 获取到 Session 对象
  • 然后通过 getAttribute 来获取你要拿的值

因为 session 是在服务器中进行存储的,所以就不能像前面 Cookie 一样可以直接“伪造”了。就需要学习如何设置 session

@RequestMapping("/setsession")  
public String setSession(HttpServletRequest request){  //从 Cookie 中获取到了SessionId,根据 SessionId 获取Session对象//如果没有获取到,就会创建一个Session对象  HttpSession session = request.getSession();  session.setAttribute("name","zhangsan");  return "设置session成功";  
}
  • 首先是在 Cookie 中获取 SessionId,然后根据 SessionId 获取 Session 对象。如果没有获取到,就会创建一个 Session 对象
  • 创建好 Session 之后,就可以进行设置了
    • 使用 setAttribute 进行设置,前面是 name,后面是 value

可以通过 Fiddler 进行观察 image.png|455

之后就可以通过 SessionId 获取到 Session 的值了 image.png|522

如果擅自将下面的 SessionId 改了,就获取不到 Sessionimage.png|450


简洁获取 Session (1)

封装一些冗余的过程

@RequestMapping("/getsession2")  
public String getsession2(HttpSession session){  String name = (String) session.getAttribute("name");  return "从session中获取name"+name;  
}
  • 这里 HttpSession 就直接省略了自己 getSession 的过程,直接就给我们提供了一个 Sessionimage.png|436

简洁获取 Session (2)

更进一步,能直接给到我们想要的 name 的值吗

@RequestMapping("/getsession3")  
public String getsession3(@SessionAttribute("name") String name){  //String name = (String) session.getAttribute("name");  return "从session中获取name:"+name;  
}
  • 这里的 @SessionAttribute 里面的值就是想要获取的 Session 的值,省略掉了指定 name 的步骤 image.png|511

相关文章:

【Spring】获取Cookie和Session(@CookieValue()和@SessionAttribute())

获取 Cookie 传统获取 Cookie 这是没有 Spring 的时候,用 Servlet 来获取(获取所有的 Cookie) Spring MVC 是基于 Servlet API 构建的原始 Web 框架,也是在 Servlet 的基础上实现的 RequestMapping("/getcookie") …...

【C++打怪之路Lv8】-- string类

🌈 个人主页:白子寰 🔥 分类专栏:重生之我在学Linux,C打怪之路,python从入门到精通,数据结构,C语言,C语言题集👈 希望得到您的订阅和支持~ 💡 坚持…...

【JS】node.js压缩文件的方式

在 Node.js 中,有多种方法可以压缩文件。以下是几种常见的压缩方式及其对应的代码示例: 使用 archiver 压缩成 ZIP 文件使用 zlib 压缩成 GZIP 文件使用 tar 压缩成 TAR 文件 1. 使用 archiver 压缩成 ZIP 文件 archiver 是一个功能强大的库&#xff…...

2024免费mac苹果电脑清理垃圾软件CleanMyMac X4.15.8

对于苹果电脑用户来说,设备上积累的垃圾文件可能会导致存储空间变得紧张,影响电脑的性能和使用体验。尤其是那些经常下载和安装新应用、编辑视频或处理大量照片的用户,更容易感受到存储空间的压力。面对这种情况,寻找一种有效的苹…...

MPA-SVM多变量回归预测|海洋捕食者优化算法-支持向量机|Matalb

目录 一、程序及算法内容介绍: 基本内容: 亮点与优势: 二、实际运行效果: 三、算法介绍: 四、完整程序下载: 一、程序及算法内容介绍: 基本内容: 本代码基于Matlab平台编译&am…...

【uni-app】HBuilderX安装uni-ui组件

目录 1、官网找到入口 2、登录帐号 3、打开HuilderX 4、选择要应用的项目 5、查看是否安装完成 6、按需安装 7、安装完毕要重启 8、应用 前言:uniapp项目使用uni-ui组件方式很多,有npm安装等,或直接创建uni-ui项目,使用un…...

ROS2 通信三大件之动作 -- Action

通信最后一个,也是不太容易理解的方式action,复杂且重要 1、创建action数据结构 创建工作空间和模块就不多说了 在模块 src/action_moudle/action/Counter.action 下创建文件 Counter.action int32 target # Goal: 目标 --- int32 current_value…...

大数据治理:构建数据驱动的智能决策体系

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...

k8s微服务

一 、什么是微服务 用控制器来完成集群的工作负载,那么应用如何暴漏出去?需要通过微服务暴漏出去后才能被访问 Service是一组提供相同服务的Pod对外开放的接口。 借助Service,应用可以实现服务发现和负载均衡。 service默认只支持4层负载均…...

【Java】Java 的反射机制(一):反射概述

Java 的反射机制(一):反射概述 1.反射概述1.1 静态语言 / 动态语言1.1.1 动态语言1.1.2 静态语言 1.2 Java Reflection1.3 Java 反射机制提供的功能1.4 反射的优点和缺陷1.5 反射相关的主要 API1.6 代码示例 2.Class 类2.1 什么是 Class 类2.…...

Monorepo pnpm 模式管理多个 web 项目

Monorepo pnpm 模式管理多个 web 项目 Monorepo pnpm 模式管理多个 web 项目项目地址git flow 工作流程pnpm workspace.npmrc初始化项目架构引入Husky规范git提交配置eslint和prettiereslint 配置prettier 配置 配置lint-staged创建项目创建shared项目全局安装 vue在 packages …...

2024年诺贝尔物理学奖颁发给了机器学习与神经网络领域的研究者,看是有点意料之外,其实也在情理之中。

近日,2024年诺贝尔物理学奖颁发给了机器学习与神经网络领域的研究者,这是历史上首次出现这样的情况。这项奖项原本只授予对自然现象和物质的物理学研究作出重大贡献的科学家,如今却将全球范围内对机器学习和神经网络的研究和开发作为了一种能…...

《深入理解 C++策略模式的变体:编程灵活性的新维度》

在 C编程的广阔领域中,设计模式起着至关重要的作用,它们为软件架构提供了可复用的解决方案。其中,策略模式是一种非常强大的设计模式,它允许算法的行为在运行时根据不同的策略进行改变。而策略模式的变体则进一步扩展了其灵活性和…...

一起体验AI动手实验,OceanBase 2024 年度发布会精彩预告

2024年OceanBase年度发布会将于10月23日在北京望京凯悦酒店举行。此次大会围绕“不止于记录”的主题,共同探讨当前数据库领域的前沿话题,包含主论坛、分论坛、AI 动手实训营、开源技术交流会等多个环节,诚邀全国各地的企业和开发者共同参与&a…...

Download Vmware Fusion (free for person)

1. web link ProductFiles - Support Portal - Broadcom support portal 2. Register user (Required) use your email to register a account 3. login and download note: the username is the email name....

【Java数据结构】二叉树

【本节目标】 1. 掌握树的基本概念 2. 掌握二叉树概念及特性 3. 掌握二叉树的基本操作 4. 完成二叉树相关的面试题练习 一. 树型结构 1 概念★ 树是一种 非线性 的数据结构,它是由 n ( n>0 )个有限结点组成一个具有层次关系的集…...

虎牙Android面试题及参考答案

给个数组,找出数组中第 k 大的数(利用快排思想 / 用小顶堆,他说可以用大顶堆?) 利用快排思想:快速排序的核心思想是分治和分区。在找数组中第 k 大的数时,每次选择一个基准元素,将数组分为两部分,左边部分小于基准元素,右边部分大于基准元素。如果基准元素最终的下标…...

C++:错误代码分析<2>

&#x1f30f;主页&#xff1a;R6bandito_ &#x1f680;所属专栏&#xff1a;C/C错误代码收集整理 源码 考虑以下代码&#xff1a; void do_some_work() {std::cout << "Do some work" << std::endl; }int main(int argc, const char* argv[]) {std::…...

怎么ping网络ip地址通不通

怎么Ping网络IP地址通不通&#xff1f;要检查网络中的IP地址是否连通&#xff0c;可以使用‌Ping命令。Ping命令通过发送ICMP&#xff08;Internet Control Message Protocol&#xff0c;因特网控制消息协议&#xff09;Echo请求报文并等待回应&#xff0c;来判断目标主机是否可…...

前端新机部署

编辑器&#xff1a;vscode 下载地址 vscode常用插件 显示代码修改历史、作者等信息 GitLens Nodejs版本 Node版本管理工具 Nvm下载地址 nvm常用命令&#xff1a; nvm ls // 查看安装的所有node.js的版本nvm list available //查看可以安装的所有node.js版本nvm install 版本…...

AssetStudio终极指南:5步解锁Unity游戏资源的完整解决方案

AssetStudio终极指南&#xff1a;5步解锁Unity游戏资源的完整解决方案 【免费下载链接】AssetStudio AssetStudio - Based on the archived Perfares AssetStudio, I continue Perfares work to keep AssetStudio up-to-date, with support for new Unity versions and additio…...

Harness Engineering:用“确定性“驾驭AI的“不确定性“

上一篇 SDD 系列收尾时&#xff0c;留了一句话&#xff1a;“如何驾驭 AI 来赋能整个软件开发周期&#xff0c;将是另外一个值得深入探讨的话题。” 到现在有将近一个月没更新&#xff01;期间除了偷懒&#xff0c;五一跑高速添堵之外&#xff0c;主要的原因是这个问题没怎么想…...

维吾尔语AI语音最后一公里难题:ElevenLabs+Kaldi联合方案实现方言变体(伊犁/喀什/和田)动态适配(含开源声学适配器)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;维吾尔语AI语音最后一公里难题的本质剖析 维吾尔语AI语音系统在实验室环境中已能实现较高识别准确率&#xff0c;但落地至真实场景时仍面临显著性能衰减——这一“最后一公里”并非技术迭代的自然延迟&…...

从零构建Cursor编辑器编码统计插件:量化开发行为与性能优化实践

1. 项目概述&#xff1a;一个为开发者定制的代码编辑器洞察工具如果你和我一样&#xff0c;每天大部分时间都泡在代码编辑器里&#xff0c;尤其是像 Cursor 这样集成了 AI 能力的新锐工具&#xff0c;那你可能也会好奇&#xff1a;我到底写了多少行代码&#xff1f;删除了多少行…...

Kubernetes 安全加固清单:从 RBAC 到 etcd 加密的生产实践

在云原生时代&#xff0c;Kubernetes 已成为容器编排的事实标准&#xff0c;但默认配置下的 K8s 并不安全。一次错误的 RBAC 权限配置、一个暴露的 etcd 端口、或者一个特权模式的 Pod&#xff0c;都可能成为攻击者的入口。本文从认证授权、Pod 安全、网络隔离、数据加密四个维…...

基于Magisk挂载机制的Android HTTPS流量监控完整技术方案

基于Magisk挂载机制的Android HTTPS流量监控完整技术方案 【免费下载链接】httpcanary-magisk 项目地址: https://gitcode.com/gh_mirrors/ht/httpcanary-magisk 现代Android系统安全架构的演进为应用开发者带来了新的技术挑战&#xff0c;特别是在HTTPS流量监控领域。…...

Python 开发者五分钟接入 Taotoken 调用 GPT 与 Claude 模型指南

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Python 开发者五分钟接入 Taotoken 调用 GPT 与 Claude 模型指南 对于习惯使用 OpenAI 官方 Python SDK 的开发者来说&#xff0c;…...

电商客服机器人如何通过 Taotoken 动态选择性价比最优的模型

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 电商客服机器人如何通过 Taotoken 动态选择性价比最优的模型 在电商客服场景中&#xff0c;用户咨询的问题复杂度差异巨大。从简单…...

游戏修改入门:用Cheat Engine精确扫描血量,5分钟搞定单机游戏数值修改

游戏修改入门&#xff1a;用Cheat Engine精确扫描血量&#xff0c;5分钟搞定单机游戏数值修改 在单机游戏的世界里&#xff0c;偶尔会遇到难度过高或重复刷怪的疲惫感。你是否想过像开发者一样自由调整游戏参数&#xff1f;Cheat Engine&#xff08;简称CE&#xff09;这款开源…...

从‘点一下’到‘连一连’:Qt6中PushButton信号与槽的5种连接方式详解(含Lambda表达式实战)

从‘点一下’到‘连一连’&#xff1a;Qt6中PushButton信号与槽的5种连接方式详解&#xff08;含Lambda表达式实战&#xff09; 在Qt框架中&#xff0c;PushButton作为最基础的交互控件之一&#xff0c;其信号与槽机制是构建响应式用户界面的核心。随着Qt6的发布&#xff0c;信…...