课程表

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,现在,我们先引用包:

 import javax.servlet.http.HttpServletResponse;

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

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

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

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

import javax.servlet.http.HttpServletRequest;

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

@RequestMapping(value="/showcookie",method= RequestMethod.GET)
public String showCookie(HttpServletRequest request) {
    StringBuilder sbCookie = new StringBuilder();
    Cookie[] sCookies = request.getCookies();
    if (sCookies != null) {
        for (Cookie sCookie : sCookies) {
            if (sCookie.getName().equals("userCookie")) {
                sbCookie.append(sCookie.getValue());
            }
        }
    }
    return sbCookie.toString();
}

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

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

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

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


二、session的设置和使用

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

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

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

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

也可以直接引用HttpSession 对象:

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

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

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

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

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

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

session.removeAttribute("user");

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

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

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

注意:本页面内容为W3xue原创,未经授权禁止转载,违者必究!
来源:W3xue  发布时间:2019/6/24 16:18:25