【Spring】获取Cookie和Session(@CookieValue()和@SessionAttribute())
【摘要】 获取 Cookie 传统获取 Cookie这是没有 Spring 的时候,用 Servlet 来获取(获取所有的 Cookie)Spring MVC 是基于 Servlet API 构建的原始 Web 框架,也是在 Servlet 的基础上实现的@RequestMapping("/getcookie") public String getCookie(HttpServletRequest...
获取 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
的步骤
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)