diff --git a/distributed-solution/spring-boot-session/README.md b/distributed-solution/spring-boot-session/README.md index f4d28e6..e36f242 100644 --- a/distributed-solution/spring-boot-session/README.md +++ b/distributed-solution/spring-boot-session/README.md @@ -1,152 +1,162 @@ -# spring boot 实现分布式 session - -## 一、项目结构 - -
- - - -## 二、分布式session的配置 - -#### 2.1 引入依赖 - -```xml - - - org.springframework.boot - spring-boot-starter-data-redis - - - org.springframework.session - spring-session-data-redis - -``` - -#### 2.2 Redis配置 - -```yaml -spring: - redis: - host: 127.0.0.1 - port: 6379 - jedis: - pool: - # 连接池最大连接数,使用负值表示无限制。 - max-active: 8 - # 连接池最大阻塞等待时间,使用负值表示无限制。 - max-wait: -1s - # 连接池最大空闲数,使用负值表示无限制。 - max-idle: 8 - # 连接池最小空闲连接,只有设置为正值时候才有效 - min-idle: 1 - timeout: 300ms - session: - # session 存储方式 支持redis、mongo、jdbc、hazelcast - store-type: redis - -# 如果是集群节点 采用如下配置指定节点 -#spring.redis.cluster.nodes - -``` - -有两点需要特别说明: - -1. spring-session 不仅提供了redis作为公共session存储的方案,同时也支持jdbc、mongodb、Hazelcast等作为公共session的存储,可以用session.store-type 指定; -2. 对于redis 存储方案而言,官方也提供了不止一种整合方式,这里我们选取的整合方案是jedis客户端作为连接,当然也可以使用Lettuce作为客户端连接。 - -#### 2.3 启动类上添加@EnableRedisHttpSession 注解开启 spring-session-redis 整合方案的自动配置 - -```java -@SpringBootApplication -@EnableRedisHttpSession(maxInactiveIntervalInSeconds= 1800) //开启redis session支持,并配置session过期时间 -public class SpringBootSessionApplication { - - public static void main(String[] args) { - SpringApplication.run(SpringBootSessionApplication.class, args); - } - -} -``` - - - -## 三、验证分布式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) { - // 随机生成用户id - user.setUserId(Math.round(Math.floor(Math.random() * 10 * 1000))); - // 将用户信息保存到id中 - session.setAttribute("USER", user); - return "home"; - } - -} -``` - -登录页面index.ftl: - -```jsp - - - - 登录页面 - - -
- 用户:
- 密码:
- -
- - -``` - -session 信息展示页面home.ftl: - -```jsp - - - - 主页面 - - -
登录用户: ${Session["USER"].username}
-
用户编号: ${Session["USER"].userId}
- - -``` - -#### 3.2 启动项目 - -由于我们这里采用的是spring boot 的内置容器作为web容器,所以直接启动两个实例测试即可。 - -应用1启动配置: - -
- -应用2启动配置,需要用 `--server.port `指定不同的端口号: - -
- -**测试结果:** - -
+# spring boot 实现分布式 session + ## 目录
+一、项目结构
+二、分布式session的配置
+        2.1 引入依赖
+        2.2 Redis配置
+        2.3 启动类上添加@EnableRedisHttpSession 注解开启 spring-session-redis 整合方案的自动配置
+三、验证分布式session
+        3.1 创建测试controller和测试页面
+        3.2 启动项目
+## 正文
+## 一、项目结构 + +
+ + + +## 二、分布式session的配置 + +#### 2.1 引入依赖 + +```xml + + + org.springframework.boot + spring-boot-starter-data-redis + + + org.springframework.session + spring-session-data-redis + +``` + +#### 2.2 Redis配置 + +```yaml +spring: + redis: + host: 127.0.0.1 + port: 6379 + jedis: + pool: + # 连接池最大连接数,使用负值表示无限制。 + max-active: 8 + # 连接池最大阻塞等待时间,使用负值表示无限制。 + max-wait: -1s + # 连接池最大空闲数,使用负值表示无限制。 + max-idle: 8 + # 连接池最小空闲连接,只有设置为正值时候才有效 + min-idle: 1 + timeout: 300ms + session: + # session 存储方式 支持redis、mongo、jdbc、hazelcast + store-type: redis + +# 如果是集群节点 采用如下配置指定节点 +#spring.redis.cluster.nodes + +``` + +有两点需要特别说明: + +1. spring-session 不仅提供了redis作为公共session存储的方案,同时也支持jdbc、mongodb、Hazelcast等作为公共session的存储,可以用session.store-type 指定; +2. 对于redis 存储方案而言,官方也提供了不止一种整合方式,这里我们选取的整合方案是jedis客户端作为连接,当然也可以使用Lettuce作为客户端连接。 + +#### 2.3 启动类上添加@EnableRedisHttpSession 注解开启 spring-session-redis 整合方案的自动配置 + +```java +@SpringBootApplication +@EnableRedisHttpSession(maxInactiveIntervalInSeconds= 1800) //开启redis session支持,并配置session过期时间 +public class SpringBootSessionApplication { + + public static void main(String[] args) { + SpringApplication.run(SpringBootSessionApplication.class, args); + } + +} +``` + + + +## 三、验证分布式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) { + // 随机生成用户id + user.setUserId(Math.round(Math.floor(Math.random() * 10 * 1000))); + // 将用户信息保存到id中 + session.setAttribute("USER", user); + return "home"; + } + +} +``` + +登录页面index.ftl: + +```jsp + + + + 登录页面 + + +
+ 用户:
+ 密码:
+ +
+ + +``` + +session 信息展示页面home.ftl: + +```jsp + + + + 主页面 + + +
登录用户: ${Session["USER"].username}
+
用户编号: ${Session["USER"].userId}
+ + +``` + +#### 3.2 启动项目 + +由于我们这里采用的是spring boot 的内置容器作为web容器,所以直接启动两个实例测试即可。 + +应用1启动配置: + +
+ +应用2启动配置,需要用 `--server.port `指定不同的端口号: + +
+ +**测试结果:** + +
+
\ No newline at end of file diff --git a/distributed-solution/spring-session/README.md b/distributed-solution/spring-session/README.md index 714ec21..903be4d 100644 --- a/distributed-solution/spring-session/README.md +++ b/distributed-solution/spring-session/README.md @@ -1,189 +1,199 @@ -# spring session 实现分布式 session - -## 一、项目结构 - -分布式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 配置: - -
- -**测试结果:** - -
+# 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 配置: + +
+ +**测试结果:** + +
+
\ No newline at end of file