这篇文章介绍一下在springboot项目中整合Spring Session,将session会话信息保存到Redis中,防止重启应用导致会话丢失。
第一步
创建一个springboot项目,添加spring-session-redis的依赖,因为要用到reids,所以要把redis相关依赖也加进来。
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency></dependencies>
第二步
在spplication.yml中配置命名空间和redis的连接信息。
spring:session:redis:save-mode: on_set_attributenamespace: spring:sessionredis:host: localhostport: 6379database: 0password: mhxy1218
第三步
在启动类上添加@EnableRedisHttpSession注解。
第四步
在项目中使用HttpSession,创建一个控制器类,然后添加两个接口分别用于设置和获取session。
package cn.edu.sgu.www.session.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Enumeration;/*** @author heyunlin* @version 1.0*/
@RestController
@RequestMapping("/session")
public class SessionController {@GetMapping("/getSession")public String getSession(HttpSession session, HttpServletRequest request) {Object name = session.getAttribute("name");// 查看请求头Enumeration<String> headerNames = request.getHeaderNames();while (headerNames.hasMoreElements()) {String element = headerNames.nextElement();System.out.println(element);}return name.toString();}@GetMapping("/setSession")public void setSession(HttpSession session, String name) {session.setAttribute("name", name);}}
第四步
启动项目,在浏览器输入以下网址,设置name为沐雨橙风ιε
http://localhost:8080/session/setSession?name=%E6%B2%90%E9%9B%A8%E6%A9%99%E9%A3%8E%CE%B9%CE%B5
然后,再访问获取session的接口
http://localhost:8080/session/getSession
第五步
查看浏览器cookie,按F12打开浏览器控制台,点击网络查看刚刚发起的请求携带的cookile数据。
把这长串字符串复制出来
第六步
清空浏览器,访问获取session数据的接口。
这时候发现已经获取不到了,这是因为清理缓存会把浏览器的cookie数据删除,所以请求时没有携带cookile请求头。
第七步
通过postman访问/session/getSession,携带请求头cookie,其内容为
SESSION=ZDcyNGFlNzgtYzUyYS00NGFjLTkwYzgtMzRiYWNjNjE1Y2Y0
第八步
重启项目,然后再获取session,这时候数据还在~
好了,文章就分享到这里了,代码已经上传到gitee~
spring boot整合spring-session-redis案例项目https://gitee.com/muyu-chengfeng/spring-session-redis.git