目录

  • 一、SpringSession 简介
  • 二、入门案例
  • 1. 环境配置
  • 2. 代码开发
  • 3. 部署测试



一、SpringSession 简介

Spring Session 是 Spring 家族中的一个子项目,它提供一组API和实现,用于管理用户的session 信息它把 servlet 容器实现的 HttpSession 替换为 spring-session,专注于解决 session管理问题,Session信息存储在Redis中,可简单快速且无缝的集成到我们的应用中。

官网:https://spring.io/

Spring Session的特性 :

  • 提供用户 session 管理的 API 和实现
  • 提供HttpSession,以中立的方式取代 web 容器的 session,比如 tomcat 中的 session
  • 支持集群的 session 处理,不必绑定到具体的 web 容器解决集群下的session共享问题

二、入门案例

1. 环境配置

创建一个空的 project,名字及路径根据自己的情况定。

springmvc设置session有效期 spring的session_redis

springmvc设置session有效期 spring的session_spring_02


空 project 创建好后,会提示创建模块,我们暂时先取消。

之后我们来设置编码方式

springmvc设置session有效期 spring的session_redis_03

设置 maven 信息

springmvc设置session有效期 spring的session_spring_04


创建一个 Maven 的 web module,起名为 springsession-web

springmvc设置session有效期 spring的session_spring_05


springmvc设置session有效期 spring的session_spring_06


springmvc设置session有效期 spring的session_redis_07


完善 Maven 项目的结构

springmvc设置session有效期 spring的session_redis_08

向 pom.xml 文件中添加 servlet及jsp 的配置

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.1.0</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>javax.servlet.jsp</groupId>
  <artifactId>jsp-api</artifactId>
  <version>2.2.1-b03</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>jstl</artifactId>
  <version>1.2</version>
</dependency>

2. 代码开发

创建向 session 放数据的 servlet

● 在 java 目录下创建包 com.fancy.session.servlet 包

springmvc设置session有效期 spring的session_SpringSession_09


● 在 servle t包下创建 SetSessionServlet

springmvc设置session有效期 spring的session_SpringSession_10


springmvc设置session有效期 spring的session_redis_11


● 在Servlet中通过注解指定 urlPatterns,并编写代码

springmvc设置session有效期 spring的session_redis_12


创建从 session 放数据的 servlet

● 在servlet包下创建 GetSessionServlet

springmvc设置session有效期 spring的session_服务器_13


● 在Servlet中通过注解指定urlPatterns,并编写代码

springmvc设置session有效期 spring的session_服务器_14

部署访问测试,目前无法实现session共享

● 配置 tomcat 9100 服务器

修改端口号

springmvc设置session有效期 spring的session_redis_15


将项目部署到 tomcat 9100上

springmvc设置session有效期 spring的session_服务器_16


实现热部署

springmvc设置session有效期 spring的session_spring_17

● 配置 tomcat 9200 服务器

操作同配置 tomcat 9100

springmvc设置session有效期 spring的session_服务器_18

SpringSession集成配置

● 在pom.xml文件中,添加Spring Session相关的依赖

<!-- Spring session redis 依赖 -->
<dependency>
  <groupId>org.springframework.session</groupId>
  <artifactId>spring-session-data-redis</artifactId>
  <version>1.3.1.RELEASE</version>
</dependency>
<!-- spring web模块依赖  -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-web</artifactId>
  <version>4.3.16.RELEASE</version>
</dependency>

● 在 web.xml 文件中配置 springSessionRepositoryFilter 过滤器

<filter>
    <filter-name>springSessionRepositoryFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>springSessionRepositoryFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

● 在 web.xml 文件中加载 Spring 配置文件

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath: application.xml</param-value>
</context-param> 

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

● 创建 applicationContext-session.xml

A、配置一个 RedisHttpSessionConfiguration 类

<!-- Spring注解、bean处理器  -->
<context:annotation-config></context:annotation-config>

<!-- Spring session 的配置类 -->
<bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
</bean>

<context:annotation-config/>

用于激活已经在Spring容器中注册的bean或者注解,因为我们通过容器创建的 bean 中,底层有可能使用了其它的注解,我们通过<context:component-scan>就不能指定具体的包了,所以可以使用<context:annotation-config/>激活

B、配置Spring-data-redis

<!-- 配置jedis连接工厂, 用于连接redis-->
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
    <property name="hostName" value="${redis.hostName}"></property>
    <property name="port" value="${redis.port}"></property>
    <property name="password" value="${redis.password}"></property>
    <property name="usePool" value="${redis.usePool}"></property>
    <property name="timeout" value="${redis.timeout}"></property>
</bean>

<!-- 读取redis.properties 属性配置文件-->
<context:property-placeholder location="classpath:redis.properties"></context:property-placeholder>

● 配置 redis.properties 文件

redis.hostName=192.168.160.133
redis.port=6379
redis.password=
redis.usePool=true
redis.timeout=15000

● 在 applicationContext.xml 中导入 applicationContext-session.xml

springmvc设置session有效期 spring的session_redis_19

点击右上角的 config 将这两个配置文件进行关联

3. 部署测试

思路

为了演示session的共享,我们这里配置两个tomcat服务器,端口号分别为 9100 和 9200,将我们上面创建好的项目分别部署到这两台服务器上。一台服务器执行放session,另一台服务器执行取session的操作。

启动Linux上的redis服务器

springmvc设置session有效期 spring的session_服务器_20

启动两台 tomcat 服务器

springmvc设置session有效期 spring的session_SpringSession_21


如连接不上Redis ,修改 redis.conf 以下配置

springmvc设置session有效期 spring的session_SpringSession_22

再在文件最后新加一条属性

notify-keyspace-events

● 在浏览器中访问 tomcat9100 服务器的 setSession

springmvc设置session有效期 spring的session_服务器_23


springmvc设置session有效期 spring的session_spring_24

分析

tomcat 9200 服务器上的项目可以访问 tomcat 9100 上的 session,说明 session 共享成功

进一步验证

打开 Redis 客户端工具 (RedisDesktopManager) ,查看Redis里面的session数据
其实标准的 redis 的 key 格式就是用冒号分割,客户端工具会以目录的形式展示

springmvc设置session有效期 spring的session_SpringSession_25