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

文章目录
  • 获取 Cookie
    • 传统获取 Cookie
    • 简洁获取 Cookie(注解)
  • 获取 Session
    • Session 存储和获取
    • 简洁获取 Session (1)
    • 简洁获取 Session (2)

获取 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

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-planinvite_code=33sw7qvy0ds04

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

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

相关文章

Linux第二课:LinuxC高级 学习记录day03

4、解压和压缩 1、gzip 和 gunzip 特点: 1)只能对单个普通文件进行压缩或解压 2)不能进行归档,压缩后或解压缩后源文件不存在 3)压缩生成压缩格式为.gz 命令: 压缩:gzip 文件名.c // …

OpenCV实现多尺度细节提升算法

1、算法原理 多尺度细节提升算法来源于论文*《DARK IMAGE ENHANCEMENT BASED ON PAIRWISE TARGET CONTRAST AND MULTI-SCALE DETAIL BOOSTING》*,算法主要是解决细节增强算法中噪声和细节的平衡问题。 常规的非锐化掩蔽(USM)算法在提升细节…

查看APK的公钥,MD5信息

查看md5 sha1 sha256的等信息 keytool -list -printcert -jarfile apk的路径地址 查看公钥私钥信息 keytool -list -rfc --keystore keystore文件的路径地址 | openssl x509 -inform pem -pubkey 把里面的keystore文件的路径地址替换成你的本地文件就可以了 如果报以上错误 就…

【机器学习实战入门】使用Python进行手写数字识别

什么是手写数字识别? 手写数字识别是计算机识别手写数字的能力。这对手工制造的设备来说是一个难题,因为手写数字并不完美,且人们书写数字的方式多种多样。手写数字识别旨在解决这一问题,通过使用数字的图像来识别该图像中的数字…

技术晋升读书笔记—华为研发

读完《华为研发》第三版,我深感震撼,书中的内容不仅详实地记录了华为公司的成长历程,还揭示了华为成功背后的管理理念和创新思路。这本书通过真实的案例和数据,展示了华为如何从一个小企业发展成全球通信行业的领导者。 一、关键人…

SQL server数据库导出excel操作

1、选择需要查询的数据库:鼠标右键—>任务—>导出数据 2、 选择数据源和服务器,使用sql server身份验证 (数据源就是指需要从哪里导出到excel表格,这里就选择你需要导出的数据库) 3、下一步选择要导出的excel表…

javaEE初阶————多线程初阶(2)

今天给大家带来第二期啦,保证给大家讲懂嗷; 1,线程状态 NEW安排了工作还未开始行动RUNNABLE可工作的,或者即将工作,正在工作BLOCKED排队等待WAITING排队等待其他事TIMED_WAITING排队等待其他事TERMINATED工作完成了 …

用LLM做测试驱动开发:有趣又高效的尝试

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

你需要什么样的资源隔离?丨TiDB 资源隔离最佳实践

导读 资源隔离是数据库性能优化的重要环节, TiDB 在当前版本已经实现了从数据级隔离到流控隔离的全面升级 ,无论是多系统共享集群、复杂负载隔离,还是小型系统整合和 SQL 精细化控制,TiDB 都提供了灵活且高效的解决方案。 本文以…

1 行命令引发的 Go 应用崩溃

一、前言 不久前,阿里云 ARMS 团队、编译器团队、MSE 团队携手合作,共同发布并开源了 Go 语言的编译时自动插桩技术。该技术以其零侵入的特性,为 Go 应用提供了与 Java 监控能力相媲美的解决方案。开发者只需将 go build 替换为新编译命令 o…

Python毕业设计选题:基于django+vue的宠物服务管理系统

开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 宠物商品管理 医疗服务管理 美容服务管理 系统…

Java连接TDengine和MySQL双数据源

git文件地址:项目首页 - SpringBoot连接TDengine和MySQL双数据源:SpringBoot连接TDengine和MySQL双数据源 - GitCode 1、yml配置 spring:datasource:druid:mysql:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/testusername: roo…

三十一、事件过滤处理分析

三十一、事件过滤处理分析eventFilter 实现以下功能 bool QObject::eventFilter(QObject *watched, QEvent *event): 如果已将此对象安装为所监视对象的事件过滤器,则过滤事件。 在你重新实现这个函数时,如果你想过滤掉事件,即停…

C++ QT中Q_Q和Q_D是什么?怎么使用?本质是什么?C++仿写

1.QT中Q_Q和Q_D是什么&#xff1f; Q_Q可以得到外部可以访问的类指针Q_D可以得到内部封装&#xff0c;外部不可达的类指针 2. 怎么使用&#xff1f; 上代码 APrivate.h #pragma once #include <QtCore>class A;class APrivate {Q_DECLARE_PUBLIC(A) public:APrivate(…

三种文本相似计算方法:规则、向量与大模型裁判

文本相似计算 项目背景 目前有众多工作需要评估字符串之间的相似(相关)程度&#xff1a;  比如&#xff0c;RAG 智能问答系统文本召回阶段需要计算用户文本与文本库内文本的相似分数&#xff0c;返回前TopK个候选文本。  在评估大模型生成的文本阶段&#xff0c;也需要评估…

高效实现 Markdown 转 PDF 的跨平台指南20250117

高效实现 Markdown 转 PDF 的跨平台指南 引言 Markdown 文件以其轻量化和灵活性受到开发者和技术写作者的青睐&#xff0c;但如何将其转换为易于分享和打印的 PDF 格式&#xff0c;是一个常见需求。本文整合了 macOS、Windows 和 Linux 三大平台的转换方法&#xff0c;并探讨…

浅谈云计算21 | Docker容器技术

Docker容器技术 一、 容器技术特性1.1 轻量级特性1.2 隔离性特性 二、容器镜像2.1 容器镜像概述2.1.1 定义与构成2.1.2 分层结构 2.2 联合文件系统2.3 容器镜像的构建与管理2.3.1 容器镜像的构建2.3.2 **构建镜像流程**2.3.3 **应用场景**2.3.4 镜像仓库的应用 2.4 容器镜像的优…

LabVIEW实现油浸式变压器自主监测与实时报告

油浸式变压器广泛应用于电力系统中&#xff0c;尤其是在电力传输和分配领域。为了确保变压器的安全、稳定运行&#xff0c;及时监测其工作状态至关重要。传统的变压器监测方法通常依赖人工巡检和定期检查&#xff0c;但这不能及时发现潜在的故障隐患&#xff0c;且效率较低。随…

【2025最新】国内中文版 ChatGPT镜像网站整理合集,GPT最新模型4o1,4o,4o-mini分类区别,镜像站是什么

1.快速导航 原生中转型镜像站点 立即Chat支持GPT4、4o以及o1,canvs等&#xff0c;同步官网功能 AIChat.com 支持最新4O 2.两者对比 官网立即Chat访问难度需要魔法直接访问支付手段国际支付国内支付封禁策略检测节点&#xff0c;随时封禁不会封禁价格每月140元订阅费用每年70元…

SpringBoot:RestTemplate与IllegalArgumentException

问题描述 在SpringBoot应用中&#xff0c;有时会遇到使用RestTemplate调用第三方服务的场景。例如&#xff1a;在进行地名数据采集时&#xff0c;为了拿到地名对应的经纬度位置&#xff0c;通常会有地理编码的步骤&#xff0c;此时就可能涉及到调用第三方接口服务实现此需求。 …