# spring session 实现分布式 session ## 一、项目结构 分布式session 主要配置文件为spring-session.xml和web.xml,其他的配置为标准的web工程的配置。 ![spring-cloud-eureka](D:\spring-samples-for-all\pictures\spring-session.png) ## 二、分布式session的配置 #### 2.1 引入依赖 ```xml org.springframework.data spring-data-redis 2.1.3.RELEASE redis.clients jedis 2.9.0 org.springframework.session spring-session-data-redis 2.1.3.RELEASE ``` #### 2.2 在web.xml中配置session拦截器 ```xml springSessionRepositoryFilter org.springframework.web.filter.DelegatingFilterProxy springSessionRepositoryFilter /* ``` #### 2.3 创建配置文件spring- session.xml,配置redis连接 有两点需要特别说明: 1. spring-session 不仅提供了redis作为公共session存储的方案,同时也支持jdbc、mongodb、Hazelcast等作为公共session的存储; 2. 对于redis 存储方案而言,官方也提供了不止一种整合方式,这里我们选取的整合方案是jedis客户端作为连接,当然也可以使用Lettuce作为客户端连接。 ```xml ``` ## 三、验证分布式session #### 3.1 创建测试controller和测试页面 ```java @Controller public class LoginController { @RequestMapping public String index(){ return "index"; } @RequestMapping("home") public String home(){ return "home"; } @PostMapping("login") public String login(User user, HttpSession session, HttpServletRequest request, Model model){ // 随机生成用户id user.setUserId(Math.round(Math.floor(Math.random() *10*1000))); // 将用户信息保存到id中 session.setAttribute("USER",user); return "redirect:home"; } } ``` 登录页面: ```jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> 登录页面
服务器:<%=request.getServerName()+":"+request.getServerPort()%>
用户:
密码:
``` session 信息展示页面(home.jsp): ```jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> 主页面
服务器:<%=request.getServerName()+":"+request.getServerPort()%>
登录用户: ${sessionScope.USER.username}
用户编号: ${sessionScope.USER.userId}
``` #### 3.2 启动项目 这里我们采用两个tomcat分别启动项目,在第一个项目index.jsp页面进行登录,第二个项目不登录,直接访问session展示页(home.jsp) tomcat 1 配置: ![spring-session-tomcat01](D:\spring-samples-for-all\pictures\spring-session-tomcat01.png) tomcat 2 配置: ![spring-session-tomcat02](D:\spring-samples-for-all\pictures\spring-session-tomcat02.png) **测试结果:** ![spring-session-8080](D:\spring-samples-for-all\pictures\spring-session-8080.png) ![spring-session-8090](D:\spring-samples-for-all\pictures\spring-session-8090.png)