在spring mvc中利用spring-session+redis实现分布式session

背景

  平时部署项目过程中可能会遇到一个程序发布到多台服务器上,通过Nginx代理请求的情况,那么某个用户在一台服务器上登录成功过后,就不用在其他服务器上再登录了,这个时候就需要用到今天说的东西了。

1、maven包添加

 1 <dependency>
 2     <groupId>org.springframework.session</groupId>
 3     <artifactId>spring-session-data-redis</artifactId>
 4 <version>1.2.1.RELEASE</version>
 5 </dependency>
 6 
 7 <dependency>
 8 <groupId>org.springframework.session</groupId>
 9     <artifactId>spring-session</artifactId>
10     <version>1.2.1.RELEASE</version>
11 </dependency>

2、在spring-redis.xml中添加,其中重写RedisSerializer文件,可以点击这里查看

 1 <!-- spring session -->
 2     <bean id="stringRedisSerializer"
 3         class="org.springframework.data.redis.serializer.StringRedisSerializer" />
 4     <bean id="GenericToStringSerializer"
 5         class="centaline.small.course.tool.GenericFastJson2JsonRedisSerializer" />
 6     <bean id="redisHttpSessionConfiguration"
 7         class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
 8         <property name="maxInactiveIntervalInSeconds" value="28800"></property>
 9         <property name="redisNamespace" value="XX(自定义名称)" />
10     </bean>
11     <bean id="springSessionDefaultRedisSerializer"
12         class="xx.xx.xx.xx.xx (重写RedisSerializer文件路径)" />
13 
14     <bean id="defaultCookieSerializer"  
15         class="org.springframework.session.web.http.DefaultCookieSerializer">  
16         <property name="cookieName" value="XX_SESSION_ID(自己项目的sessionID名称)" />  
17         <property name="cookiePath" value="/" />  
18     </bean>  
19            
20      <bean id="cookieHttpSessionStrategy"  
21         class="org.springframework.session.web.http.CookieHttpSessionStrategy">  
22         <property name="cookieSerializer" ref="defaultCookieSerializer" />  
23     </bean> 

3、在登录成功后设置session和平时一样,附上工具类。

 1 public class SessionUtils {
 2 
 3     @Resource(name = "sessionRepository")
 4     private SessionRepository<ExpiringSession> sessionRepository;
 5 
 6     private static final String SESSION_NAME = "LOGIN_INFO_SESSION";
 7 
 8     @Autowired
 9     private HttpSession httpSession;
10 
11     public String getSessionId() {
12         String sessionId = httpSession.getId();
13         return sessionId;
14     }
15 
16     public LoginInfo getLoginInfo() {
17         LoginInfo loginInfo = (LoginInfo) httpSession.getAttribute(SESSION_NAME);
18         return loginInfo;
19     }
20 
21     public String setLoginInfo(LoginInfo loginInfo) {
22         String sessionId = httpSession.getId();
23         httpSession.setAttribute(SESSION_NAME, loginInfo);
24         return sessionId;
25     }
26 
27     public void logout() {
28         httpSession.removeAttribute(SESSION_NAME);
29     }
30 
31     public LoginInfo getLoginInfoBySessionId(String sessionId) {
32         ExpiringSession expiringSession = sessionRepository.getSession(sessionId);
33         LoginInfo loginInfo = (LoginInfo) expiringSession.getAttribute(SESSION_NAME);
34         return loginInfo;
35     }
36 }
SessionUtils

 

转载于:https://www.cnblogs.com/rolayblog/p/11176433.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值