背景
平时部署项目过程中可能会遇到一个程序发布到多台服务器上,通过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 }