0


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

获取 Cookie

传统获取 Cookie

这是没有

Spring

的时候,用

Servlet

来获取(获取所有的 Cookie)

  • Spring MVC 是基于 Servlet API 构建的原始 Web 框架,也是在 Servlet 的基础上实现的
@RequestMapping("/getcookie")publicStringgetCookie(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

,随后保存 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")publicStringgetCookie2(@CookieValue("bite")String bite){return"从Cookie中获取值, bite:"+bite;}
@CookieValue

里面的值,就是你要获取的

Cookie

image.png|448

获取 Session

Session 存储和获取

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

@RequestMapping("/getsession")publicStringgetsession(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")publicStringsetSession(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

改了,就获取不到

Session

image.png|450


简洁获取 Session (1)

封装一些冗余的过程

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

简洁获取 Session (2)

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

@RequestMapping("/getsession3")publicStringgetsession3(@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-plan?invite_code=33sw7qvy0ds04

标签: spring java 后端

本文转载自: https://blog.csdn.net/Yeeear/article/details/142904091
版权归原作者 椰椰椰耶 所有, 如有侵权,请联系我们删除。

“【Spring】获取Cookie和Session(@CookieValue()和@SessionAttribute())”的评论:

还没有评论