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