课程表

Spring Boot课程

工具箱
速查手册

Boot cookies和session

当前位置:免费教程 » Java相关 » Spring Boot
注意:本页面内容为W3xue原创,未经授权禁止转载,违者必究!
来源:W3xue  发布时间:2019/6/24 16:18:25

在Web开发中,cookies和session是常用的2个工具,下面就分别介绍这2个工具。

一、Cookies的设置和使用

Cookies用在浏览器本地,但我们可以通过服务器端设置,设置后,本地的操作系统就会在本地写入Cookies文件,而两者再次通讯时,客户端就会携带Cookies信息访问服务器。早年的Cookies文件系统很容易被攻破,当今的主流操作系统虽然加强了安全性,但Cookies还是很容易被篡改。Cookies可以被本地JS修改,利用青花瓷或者fiddler等工具,很轻松的可以实现抓包、修改JS代码,这意味着Cookies也很容易被篡改。所以,服务器端不要相信客户端携带的Cookies信息,特别是在进行用户身份验证时。只能将其作为辅助信息,并且,最终要对客户端发送的Cookies进行充分彻底的验证。

那么,如何使用Cookies呢?首先,我们来设置Cookies。设置Cookies需要用到HttpServletResponse 对象。我们在之前的Hello World小节中设置了一个controller,现在,我们先引用包:

  1.  import javax.servlet.http.HttpServletResponse;

然后在controller方法中添加一个HttpServletResponse类型的参数“response”,然后在return返回语句之前,加上设置cookies的代码,并修改返回的字符串:

  1. @RequestMapping(value="/hello",method= RequestMethod.GET)
  2. public String sayHello(HttpServletResponse response) {
  3.     Cookie cookie = new Cookie("userCookie", "myUserName");
  4.     cookie.setMaxAge(100); //设置过期时间:秒
  5.     response.addCookie(cookie);
  6.     return "Cookies 已设置<br />Hello World," + sSpecialName;
  7. }

这样,在我们再次访问“http://localhost:8080/jiaocheng/hello”这个地址时,就设置了一个键为“userCookie”的Cookies,它的值为“myUserName”,它的过期时间为100秒。

那么如何访问这个Cookies呢?Spring Boot有2种办法可以获取Cookies的值。第一种是通过传统的代码的办法,通过引用HttpServletRequest 对象来实现。例如,我们先引用包:

  1. import javax.servlet.http.HttpServletRequest;

然后,再设置一个名为“showcookie”的路径,并在方法中添加一个HttpServletRequest 类型的参数“request”:

  1. @RequestMapping(value="/showcookie",method= RequestMethod.GET)
  2. public String showCookie(HttpServletRequest request) {
  3.     StringBuilder sbCookie = new StringBuilder();
  4.     Cookie[] sCookies = request.getCookies();
  5.     if (sCookies != null) {
  6.         for (Cookie sCookie : sCookies) {
  7.             if (sCookie.getName().equals("userCookie")) {
  8.                 sbCookie.append(sCookie.getValue());
  9.             }
  10.         }
  11.     }
  12.     return sbCookie.toString();
  13. }

这样,我们先访问http://localhost:8080/jiaocheng/hello”这个地址,然后再访问“http://localhost:8080/jiaocheng/showcookie”这个地址,就会看到页面上打印出刚刚设置的Cookies值“myUserName”。

获取Cookies的第二种办法是通过注解,非常的方便简洁,只需要在方法的参数前面加上@CookieValue("键名")这样的注解就可以了,被注解的参数就会被赋值为这个键名的Cookies的值。例如,我们再设置一个名为showcookie2”的路径:

  1. @RequestMapping(value="/showcookie2",method= RequestMethod.GET)
  2. public String showCookie2(@CookieValue("userCookie") String sCookie) {
  3.     return sCookie;
  4. }

这样,我们先访问http://localhost:8080/jiaocheng/hello”,然后再访问“http://localhost:8080/jiaocheng/showcookie2”,就会跟刚刚的方法一样,看到刚才设置的Cookies值“myUserName”。


二、session的设置和使用

session一般被称为“会话”,它是服务器发给客户端的一种状态,一种凭证,它和cookies类似,不同的是,它是由服务器端发送给客户端的,客户端无法对session进行设置、修改等,因此安全性增强了许多。

那么,Spring Boot中如何使用session呢?

首先是引用相关对象。有2种常见办法可以引用HttpSession对象。第一种是通过HttpServletRequest对象的getSession()方法,获取一个HttpSession对象,例如:

  1. public String showSession(HttpServletRequest request) {
  2.     HttpSession session = request.getSession();
  3.     return "HttpSession对象已获取";
  4. }

也可以直接引用HttpSession 对象:

  1. public String showSession(HttpSession session) {
  2.     return "HttpSession对象已获取";
  3. }

在创建对象之后,就可以使用内置的方法设置session了,下面的代码设置一个键为“user”的session,值为“张三”:

  1. session.setAttribute("user","张三");

设置之后,通过下面的代码就可以获取这个键的值了,下面的代码将刚才设置的session赋值给字符串变量sUserName:

  1. String sUserName=session.getAttribute("user").toString();

下面介绍删除session。通过下面的代码可以彻底删除和清空这个session:

  1. session.removeAttribute("user");

最后,我们添加一个名为“showsession”的路径,实验一下刚才的代码:

  1. @RequestMapping(value="/showsession",method= RequestMethod.GET)
  2. public String showSession(HttpSession session) {
  3.     session.setAttribute("user","张三");
  4.     String sUserName=session.getAttribute("user").toString();
  5.     session.removeAttribute("user");
  6.     return sUserName;
  7. }

如何一切顺利,你就可以在屏幕上看到“张三”的名字了。

注意:本页面内容为W3xue原创,未经授权禁止转载,违者必究!
来源:W3xue  发布时间:2019/6/24 16:18:25
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号