zoukankan      html  css  js  c++  java
  • 在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
  • 相关阅读:
    JDBC
    初识JAVA
    初入门 HTML
    jsp数据交互(一).3
    jsp数据交互(一).2
    jsp数据交互(一).1
    jsp的简介(1)
    Android实现数据存储技术
    Android数据存储五种方式总结
    SD卡操作
  • 原文地址:https://www.cnblogs.com/rolayblog/p/11176433.html
Copyright © 2011-2022 走看看