发现有的项目中使用了SpringSession技术,使用普通Session可以达到多个工程共享Session的目的,感觉很有意义,于是自己在本地搭建了一套demo,来测试一下。
本篇博客借鉴了ssm集成springSession解决session会话丢失,感谢作者分享。
SpringSession的原理其实很简单,就是把HttpSession放入了redis中,所有的seesion操作,操作的都是redis中的这个session,由此达到了session共享的目的。
好了,原理性的东西目前就了解了这么多。下面我们看一下如何在ssm工程中引入SpringSession技术。
1.引入相关依赖
<!-- springsession-->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>1.3.0.RELEASE</version>
</dependency>
2.web.xml配置
配置Spring的filter代理类,将filter的生命周期交予Spring管理。
<!--SpingSession-->
<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>
3.Spring配置文件配置
引入SpringSession配置类,我们可以根据项目的需要配置一下SpringSession,比如:我在例子中就配置了SpringSession在redis中的命名空间
另外一个,就是添加了redis的连接工厂类,因为SpringSession的共享是依赖redis的,所以需要引入redis
<bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration" p:redisNamespace="mvc"/>
<bean name="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="hostName" value="${redis.hostname}"/>
<property name="port" value="${redis.port}"/>
<property name="password" value="${redis.password}"/>
</bean>
4.使用SpringSession
下面,我们就可以使用SpringSession了,使用SpringSession和使用普通的HttpSession一样,如下例:
@RequestMapping(value = "/get",method = RequestMethod.GET)
public String getConfigName(HttpServletRequest request,HttpSession session){
log.info("进入get方法,[{}]",request.getRequestURI());
session.getAttribute("configName");
return (String)session.getAttribute("configName");
}