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

 更新时间:2026年01月13日 11:10:46   作者:椰椰椰耶  
本文主要介绍了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=bite,value=666,随后保存

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

  • Spring MVC 是基于 Servlet API 构建的原始 Web 框架,也是在 Servlet 的基础上实现的
  • HttpServletRequest,HttpServletResponse 是 Servlet 提供的两个类,是 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

获取 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 进行观察

之后就可以通过 SessionId 获取到 Session 的值了

如果擅自将下面的 SessionId 改了,就获取不到 Session

简洁获取 Session (1)

封装一些冗余的过程

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

简洁获取 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 的步骤

到此这篇关于Spring获取Cookie和Session(@CookieValue()和@SessionAttribute())的文章就介绍到这了,更多相关Spring获取Cookie和Session内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java遍历Map的方法汇总

    Java遍历Map的方法汇总

    大家平时在使用Java开发时,经常会遇到遍历Map对象的问题,本文就给大家介绍几种Java遍历Map对象的方法,并简单分析一下每种方法的效率,需要的朋友可以参考下
    2023-12-12
  • Java泛型的用法及T.class的获取过程解析

    Java泛型的用法及T.class的获取过程解析

    这篇文章主要介绍了Java泛型的用法及T.class的获取过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • SpringBoot读取自定义配置文件方式(properties,yaml)

    SpringBoot读取自定义配置文件方式(properties,yaml)

    这篇文章主要介绍了SpringBoot读取自定义配置文件方式(properties,yaml),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • java中类和对象的详细介绍

    java中类和对象的详细介绍

    这篇文章主要给大家介绍了关于java中类和对象的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 深入探究Java多线程并发编程的要点

    深入探究Java多线程并发编程的要点

    这篇文章主要介绍了深入探究Java多线程并发编程的要点,包括关键字synchronized的使用和wait()与notify()获取对象锁的三种方式,需要的朋友可以参考下
    2015-11-11
  • Java如何自定义类数组的创建和初始化

    Java如何自定义类数组的创建和初始化

    这篇文章主要介绍了Java如何自定义类数组的创建和初始化,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Java泛型机制与反射原理相关知识总结

    Java泛型机制与反射原理相关知识总结

    今天带大家学习的是关于Java进阶的相关知识,文章围绕着Java泛型机制与反射原理展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • 详解使用Maven构建多模块项目(图文)

    详解使用Maven构建多模块项目(图文)

    这篇文章主要介绍了详解使用Maven构建多模块项目(图文),非常具有实用价值,需要的朋友可以参考下
    2017-09-09
  • Java ConcurrentHashMap的使用示例

    Java ConcurrentHashMap的使用示例

    这篇文章主要介绍了Java ConcurrentHashMap的使用示例,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下
    2021-04-04
  • spring-boot读取props和yml配置文件的方法

    spring-boot读取props和yml配置文件的方法

    本篇文章主要介绍了spring-boot读取props和yml配置文件的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12

最新评论