如果项目之前没有整合过spring-data-redis的话,这一步需要先做,在maven中添加这两个依赖:
< dependency >
< groupId >org.springframework.data</ groupId >
< artifactId >spring-data-redis</ artifactId >
< version >1.5.2.RELEASE</ version >
</ dependency >
< dependency >
< groupId >org.springframework.session</ groupId >
< artifactId >spring-session</ artifactId >
< version >1.0.2.RELEASE</ version >
</ dependency >
|
再在applicationContext.xml中添加以下bean,用于定义redis的连接池和初始化redis模版操作类,自行替换其中的相关变量。
<!-- redis --> < bean id = "jedisPoolConfig" class = "redis.clients.jedis.JedisPoolConfig" >
</ bean >
< bean id = "jedisConnectionFactory"
class = "org.springframework.data.redis.connection.jedis.JedisConnectionFactory" >
< property name = "hostName" value = "${redis.host}" />
< property name = "port" value = "${redis.port}" />
< property name = "password" value = "${redis.pass}" />
< property name = "timeout" value = "${redis.timeout}" />
< property name = "poolConfig" ref = "jedisPoolConfig" />
< property name = "usePool" value = "true" />
</ bean >
< bean id = "redisTemplate" class = "org.springframework.data.redis.core.StringRedisTemplate" >
< property name = "connectionFactory" ref = "jedisConnectionFactory" />
</ bean >
<!-- 将session放入redis --> < bean id = "redisHttpSessionConfiguration"
class = "org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration" >
< property name = "maxInactiveIntervalInSeconds" value = "1800" />
</ bean >
|
这里前面几个bean都是操作redis时候使用的,最后一个bean才是spring-session需要用到的,其中的id可以不写或者保持不变,这也是一个约定优先配置的体现。这个bean中又会自动产生多个bean,用于相关操作,极大的简化了我们的配置项。其中有个比较重要的是springSessionRepositoryFilter,它将在下面的代理filter中被调用到。maxInactiveIntervalInSeconds表示超时时间,默认是1800秒。写上述配置的时候我个人习惯采用xml来定义,官方文档中有采用注解来声明一个配置类。
然后是在web.xml中添加一个session代理filter,通过这个filter来包装Servlet的getSession()。需要注意的是这个filter需要放在所有filter链最前面。
<!-- delegatingFilterProxy --> < 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 >
|
这样便配置完毕了,需要注意的是,spring-session要求Redis Server版本不低于2.8。
验证:使用redis-cli就可以查看到session key了,且浏览器Cookie中的jsessionid已经替换为session。