【spring】Cookie和Session的设置与获取(@CookieValue()和@SessionAttribute())

news2024/11/7 8:02:00

💐个人主页:初晴~

📚相关专栏:程序猿的春天


获取Cookie

使用 Servlet 获取Cookie:

  • Spring MVC 是基于 Servlet API 构建的原始 Web 框架,也是在 Servlet 的基础上实现的
@RestController
@RequestMapping("/cookie")
public class CookieController {
    @RequestMapping("/getcookie")
    public String getCookie(HttpServletRequest request){
        //获取所有 cookie的信息
        Cookie[] cookies = request.getCookies();
        for (Cookie cookie:cookies){
            System.out.println(cookie.getName()+":"+cookie.getValue());
        }
        return "获取Cookie成功!";
    }
}
  • HttpServletRequest 对象代表客⼾端的请求, 当客⼾端通过HTTP协议访问服务器时,HTTP请 求头中的所有信息都封装在这个对象中,通过这个对象提供的⽅法,可以获得客⼾端请求的所有信 息.
  • HttpServletResponse 对象代表服务器的响应. HTTP响应的信息都在这个对象中, ⽐如向客⼾ 端发送的数据, 响应头, 状态码等. 通过这个对象提供的⽅法, 可以获得服务器响应的所有内容
HttpServletRequest , HttpServletResponse 是Servlet提供的两个类, 是Spring MVC⽅法的内置对象. 需要时直接在⽅法中添加声明即可
不过上述代码当没有设置Cookie,也就是Cookie为空时,会发生 500 的报错:

让我们设置一下Cookie的值:

 此时在访问:

后端就能成功拿到Cookie的值了


使用注解 @CookieValue()获取Cookie

Spring MVC 在这两个对象的基础上进行封装,给我们提供更加简单的使用方法

@RestController
@RequestMapping("/cookie")
public class CookieController {
    @RequestMapping("/getcookie2")
    public String getCookie2(@CookieValue("jay") String jay){
        return "成功获取到Cookie中的 jay:"+jay;
    }
}

不过这两种方式各有优劣:

  • 传统方法可以一次拿到多个Cookie对象
  • @CookieValue一次只能拿到一个指定的Cookie对象

获取Session

Session 存储和获取
  • 使用Servlet获取Session
@Controller
@RequestMapping("/session")
public class SessionController {
    @RequestMapping("/getsession")
    public String getSession(HttpServletRequest request){
        //从Cookie中获取到了SessionId,根据SessionId获取对应的Session对象
        HttpSession session=request.getSession();
        //通过 getAttribute 获取需要的值
        String userName = (String)session.getAttribute("userName");
        return "获取到Session中的userName为:"+userName;
    }
}

不过由于Session是服务器端的机制,我们无法像Cookie那样直接在浏览器中伪造Session。我们需要先存储,才能再获取

Session存储

@RequestMapping("/setsession")
public String setSession(HttpServletRequest request){
    //从 Cookie 中获取到了SessionId,根据 SessionId 获取Session对象
    //如果没有获取到,就会创建一个Session对象
    HttpSession session = request.getSession();
    session.setAttribute("userName","jay");
    return "设置session成功";
}

getSession() 可以设置一个布尔类型的参数:

  • getSession(true),如果Session对象为空,会创建一个空的Session对象
  • getSession(false),如果Session对象为空,不会创建Session

getSession默认值为空

因此当第一次调用 getSession() 时,就会自动创建一个空的 Session对象,接着就可以通过setAttribute() 方法来设置Session了,前面表示 name,后面表示 value

我们用Fiddler抓包看一下:

此时Session就创建好了,可以通过 SessionId 来获取 Session 的值了:

如果自己私自更改SessionId的值,就会导致后端无法获取 Session对象了:

简易方式获取Session:

(1)用 HttpSession 直接获取Session

@RequestMapping("/getsession2")
public String getsession2(HttpSession session){
    String userName = (String) session.getAttribute("userName");
    return "从session中获取UserName:"+userName;
}

这样就不需要我们手动用 Request 调用getSession来获取 Session 对象了

(2)用 @SessionAttribute(" ") 注解获取对应元素值

@RequestMapping("/getsession3")
public String getsession3(@SessionAttribute("userName") String userName){
    return "从session中获取userName:"+userName;

设置 @SessionAttribute(" ")注解 中的值就会获取Session对象中的对应元素值,从而省略了指定name 的步骤


那么本篇文章就到此为止了,如果觉得这篇文章对你有帮助的话,可以点一下关注和点赞来支持作者哦。如果有什么讲的不对的地方欢迎在评论区指出,希望能够和你们一起进步✊

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

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

相关文章

神经网络基础--什么是神经网络?? 常用激活函数是什么???

前言 本专栏更新神经网络的一些基础知识;案例代码基于pytorch;欢迎收藏 关注, 本人将会持续更新。 神经网络 1、什么是神经网络 人工神经网络( Artificial Neural Network, 简写为ANN)也简称为神经网络…

030集——分组法——C# CAD二次开发

重叠的图行进行分组,效果如下: 纵向投影重叠(横向移动冲突)可以分组: 纵向冲突也可以分组: 也可根据颜色不同分组: 部分代码如下,完整代码见文章下方名片 public class Class1{[CommandMethod(…

Edge 浏览器插件开发:图片切割插件

Edge 浏览器插件开发:图片切割插件 在图片处理领域,按比例切割图片是一个常见需求。本文将带你开发一个 Edge 浏览器插件,用于将用户上传的图片分割成 4 个部分并自动下载到本地。同时,本文介绍如何使用 cursor 辅助工具来更高效…

关于圆周率

关于圆周率 大约20年前的2005年,我在上大学的时候,网上流传这样一段程序,被称之为“外星人计算圆周率程序”。程序如下: long a 10000, b, c 2800, d, e, f[2801], g; main() {for (; b - c;) f[b] a / 5; for (; d 0, g …

【docker】6. 镜像仓库/镜像概念

Docker Registry(镜像仓库) 什么是 Docker Registry 镜像仓库 (Docker Registry) 负责存储、管理和分发镜像,并且提供了登录认证能力,建立了仓库的索引。 镜像仓库管理多个 Repository, Repository 通过命名来区分。…

debian系统安装qt的时候 显示xcb相关文件缺失

如果是安装之后的问题 我们可以选择使用ldd的命令查看当前依赖的so那些文件确实 ldd /home/yinsir/Qt/5.15.2/gcc_64/plugins/platforms/libqxcb.so 本人在进行打包的时候 出现则会个报错 ERROR: ldd outputLine: “libxcb-util.so.1 > not found” ERROR: for binary: “/…

怎么查看navicat的数据库密码

步骤1:打开navicat连接数据库工具&#xff0c;顶部的文件栏-导出结果-勾选导出密码-导出 步骤2&#xff1a;导出结果使用NotePad或文本打开&#xff0c;找到&#xff0c;数据库对应的的Password"995E66F64A15F6776“”的值复制下来 <Connection ConnectionName"…

清华大学提出Mini-Omni2:开源多模态模型,功能与GPT-4o媲美!

&#x1f310; 在人工智能领域&#xff0c;多模态模型的发展正如火如荼。今天&#xff0c;我们要介绍的是由清华大学提出的Mini-Omni2&#xff0c;这是一个开源的多模态语言模型&#xff0c;它在功能上与GPT-4o相媲美&#xff0c;能够理解和生成视觉、听觉和文本内容&#xff0…

webrtc前端播放器完整案例

https://download.csdn.net/download/jinhuding/89961792

网管平台(进阶篇):如何正确的管理网络设备?

网络设备作为构建计算机网络的重要基石&#xff0c;扮演着数据传输、连接和管理的关键角色。从交换机、路由器到防火墙、网关&#xff0c;各类网络设备共同协作&#xff0c;形成了高效、稳定的网络系统。本文将详细介绍网络设备的种类&#xff0c;并探讨如何正确管理这些设备&a…

深入理解 Spring AOP:面向切面编程的原理与应用

一、概述 AOP&#xff08;Aspect Orient Programming&#xff09;是一种设计思想&#xff0c;是软件设计领域中的面向切面编程&#xff0c;它是面向对象编程(OOP)的一种补充和完善。它以通过预编译方式和运行期动态代理方式&#xff0c;实现在不修改源代码的情况下给程序动态统…

ML 系列:机器学习和深度学习的深层次总结( 19)— PMF、PDF、平均值、方差、标准差

一、说明 在概率和统计学中&#xff0c;了解结果是如何量化的至关重要。概率质量函数 &#xff08;PMF&#xff09; 和概率密度函数 &#xff08;PDF&#xff09; 是实现此目的的基本工具&#xff0c;每个函数都提供不同类型的数据&#xff1a;离散和连续数据。 二、PMF 的定义…

基于STM32的八位数码管显示Proteus仿真设计

基于STM32的八位数码管显示Proteus仿真设计 1.主要功能2.仿真设计3. 程序设计4. 设计报告5. 资料清单&下载链接 基于STM32的八位数码管显示Proteus仿真设计(仿真程序设计报告讲解视频&#xff09; 仿真图proteus 8.9 程序编译器&#xff1a;keil 5 编程语言&#xff1a;…

Linux grep命令详解(多图、多示例)

文章目录 grep基本说明grep参数简单示例列举参数-v(反选)-r -l -H -i(目录子目录、只打印匹配文件、输出文件名、忽略大小写)-c -n -o(匹配次数、输出行号、只打印匹配)-A -B -C(前后行) 正则表达式基本正则表达式与扩展正则表达式 grep示例附录:正则表达式基本字符特殊字符Per…

力扣:225 用队列实现栈

栈、队列 栈&#xff1a; 弹夹&#xff0c;后进先出 队列&#xff1a; 排队&#xff0c;先进先出 描述&#xff1a; var MyStack function () {// 定义两个数组&#xff0c;模拟队列this.queue []this._queue [] };/** * param {number} x* return {void}*/ MyStack.protot…

【MFC编程(一)】MFC概述

文章目录 MFC概述MFC组成MFC对比Windows APIMFC类库基类CObject命令发送类CCmdTarget应用程序结构类应用程序线程支持类CWinThread/CWinApp文档类CDocument文档模板类CDocTemplate 窗口类窗口基类CWnd边框窗口类CFrameWnd视图类CView MFC概述 MFC&#xff08;Microsoft Founda…

【客观理性深入讨论国产中间件及数据库-科创基础软件】

随着国产化的进程&#xff0c;越来越多的国企央企开始要求软件产品匹配过程化的要求&#xff0c; 最近有一家银行保险的科技公司对行为验证码产品就要求匹配国产中间件&#xff0c; 于是开始了解国产中间件都有哪些厂家 一&#xff1a;国产中间件主要产品及厂商 1 东方通&…

基于Python的校园爱心帮扶管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

pycharm小游戏贪吃蛇及pygame模块学习()

由于代码量大&#xff0c;会逐渐发布 一.pycharm学习 在PyCharm中使用Pygame插入音乐和图片时&#xff0c;有以下这些注意事项&#xff1a; 插入音乐&#xff1a; - 文件格式支持&#xff1a;Pygame常用的音乐格式如MP3、OGG等&#xff0c;但MP3可能需额外安装库&#xf…

A018基于Spring Boot的民宿租赁系统

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…