# spring session 实现分布式 session
## 目录
一、项目结构
二、分布式session的配置
2.1 引入依赖
2.2 在web.xml中配置session拦截器
2.3 创建配置文件spring- session.xml,配置redis连接
三、验证分布式session
3.1 创建测试controller和测试页面
3.2 启动项目
## 正文
## 一、项目结构
分布式session 主要配置文件为spring-session.xml和web.xml,其他的配置为标准的web工程的配置。
## 二、分布式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 配置:
tomcat 2 配置:
**测试结果:**