1、添加依賴
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>1.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.8.1</version>
</dependency>
2、配置
spring-mvc.xml:
<bean id="redisHttpSessionConfiguration"
class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
<property name="maxInactiveIntervalInSeconds" value="600"/>
</bean>
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxTotal" value="100" />
<property name="maxIdle" value="10" />
</bean>
<bean id="jedisConnectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" destroy-method="destroy">
<property name="hostName" value="${redis_hostname}"/>
<property name="port" value="${redis_port}"/>
<property name="password" value="${redis_pwd}" />
<property name="timeout" value="3000"/>
<property name="usePool" value="true"/>
<property name="poolConfig" ref="jedisPoolConfig"/>
</bean>
web.xml添加攔截器:
<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-session
只要使用標准的servlet api調用session,在底層就會通過Spring Session得到的,並且會存儲到Redis或其他你所選擇的數據源中。
這里是我寫的一個demo:
/**
* @author fengzp
* @date 17/2/23下午3:19
* @email fengzp@gzyitop.com
* @company 廣州易站通計算機科技有限公司
*/
@Controller
@RequestMapping(value = "index")
public class IndexController {
private final Gson gson = new GsonBuilder().setDateFormat("yyyyMMddHHmmss").create();
@RequestMapping(value = "login")
public String login(HttpServletRequest request, String username){
request.getSession().setAttribute("user", gson.toJson(new User(username,"123456")));
return "login";
}
@RequestMapping(value = "index")
public String index(HttpServletRequest request, Model model){
User user = gson.fromJson(request.getSession().getAttribute("user").toString(), User.class);
model.addAttribute("user", user);
return "index";
}
}
index.jsp:
第一個tomcat
<html>
<body>
<h2>Hello World!</h2>
<p>${user.username}</p>
</body>
</html>
第二個tomcat
<html>
<body>
<h2>Hello World! i am the second!</h2>
<p>${user.username}</p>
</body>
</html>
測試
這里利用上一篇nginx負載配置的兩個tomcat來測試。
首先訪問 http://192.168.99.100/feng/index/login.htm?username=nginx
來觸發生成session。
查看redis,發現session已經保存到redis。
訪問 http://192.168.99.100/feng/index/index.htm
來讀取session, 並刷新多次。
發現在負載的情況下讀取session沒問題,並且是同一個session,成功實現負載+session共享!