1、添加依赖
1
2
3
4
5
6
7
8
9
10
|
<
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<
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添加拦截器:
1
2
3
4
5
6
7
8
|
<
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:
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
27
28
|
/**
* @author fengzp
* @date 17/2/23下午3:19
*/
@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
1
2
3
4
5
6
|
<
html
>
<
body
>
<
h2
>Hello World!</
h2
>
<
p
>${user.username}</
p
>
</
body
>
</
html
>
|
第二个tomcat
1
2
3
4
5
6
|
<
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共享!以上就是本文的全部内容,希望对大家的学习有所帮助.