实现Session共享的方案很多,有依赖容器提供的Session共享功能
本文主要介绍另一种实现Session共享的方案,不依赖于容器,而是Web配置方面,不需要增加任何的代码实现,Spring Session框架来实现Session统一存储在Redis中。只需要对现有项目进行少量配置,单机应用改为一个分布式应用。
Maven依赖
在项目中加入Spring Session的相关依赖包,包括Spring Data Redis、Jedis、Apache Commons Pool:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 1<!-- Jedis -->
2<dependency>
3 <groupId>redis.clients</groupId>
4 <artifactId>jedis</artifactId>
5 <version>2.9.0</version>
6</dependency>
7<!-- Spring Data Redis -->
8<dependency>
9 <groupId>org.springframework.data</groupId>
10 <artifactId>spring-data-redis</artifactId>
11 <version>1.7.3.RELEASE</version>
12</dependency>
13<!-- Spring Session -->
14<dependency>
15 <groupId>org.springframework.session</groupId>
16 <artifactId>spring-session</artifactId>
17 <version>1.2.2.RELEASE</version>
18</dependency>
19<!-- Apache Commons Pool -->
20<dependency>
21 <groupId>org.apache.commons</groupId>
22 <artifactId>commons-pool2</artifactId>
23 <version>2.4.2</version>
24</dependency>
25
26
配置Filter
在web.xml中加入以下过滤器,Spring Session的过滤器要放在第一位。
1
2
3
4
5
6
7
8
9
10
11
12 1<filter>
2 <filter-name>springSessionRepositoryFilter</filter-name>
3 <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
4</filter>
5<filter-mapping>
6 <filter-name>springSessionRepositoryFilter</filter-name>
7 <url-pattern>/*</url-pattern>
8 <dispatcher>REQUEST</dispatcher>
9 <dispatcher>ERROR</dispatcher>
10</filter-mapping>
11
12
Spring配置文件
1
2
3
4
5
6
7
8 1<bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"/>
2<bean class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
3 <property name="hostName" value="localhost" />
4 <property name="password" value="123456" />
5 <property name="port" value="6379" />
6 <property name="database" value="10" />
7</bean>
8
只需要以上简单的配置,至此为止即已经完成Web应用Session统一存储在Redis中,可以说是及其简单。