Boot cookies和session
注意:本页面内容为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


优化或报错有奖