栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringMVC集成Spring-Session

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringMVC集成Spring-Session

最近接手了一个SpringMVC的老系统,要做Nginx多机部署,之前一直是单机运行,且使用了session存储登录态,部署多机后会出现session不一致的问题,所以需要做session共享。 

部署环境

Linux+Nginx+Tomcat

 开发框架

SpringMVC+JSP,前后端不分离

方案选择 

 方案一:Redis+Jedis+FastJson

    引入Redis、Jedis、FastJson依赖,自己实现RedisUtil,将登陆信息存储Redis,然后在LoginFilter中校验。

    由于是老项目,且使用到session的get、set的地方非常多,替换成redis的话要修改大量的代码,所以暂时放弃此方案。

 方案二:使用Tomcat内置的Session复制 

    具体做法不赘述,只适合Tomcat小集群,不适合大集群,所以暂不考虑此方案。

方案三:使用tomcat-cluster-redis-session-manager-2.0.4

    起初使用的此方案,从github下载压缩包后,将jar文件拷贝到tomcat的lib下,修改redis配置文件、web.xml和context.xml后,发现Nginx转发后拿不到登录态,使用redis-cli查询keys *后发现能存储session信息到redis,但是set不进去数据,最终放弃。

Supports:
   * Apache Tomcat 7
   * Apache Tomcat 8
   * Apache Tomcat 9

Pre-requisite:
    1. jedis.jar
    2. commons-pool2.jar
    3. commons-logging.jar

more details.. https://github.com/ran-jit/TomcatClusterRedisSessionManager/wiki

Steps to be done,
    1. Move the downloaded jars to tomcat/lib directory
        * tomcat/lib/

    2. Add tomcat system property "catalina.base"
        * catalina.base="TOMCAT_LOCATION"

    3. Extract downloaded package (tomcat-cluster-redis-session-manager.zip) to configure Redis credentials in redis-data-cache.properties file and move the file to tomcat/conf directory
        * tomcat/conf/redis-data-cache.properties

    4. Add the below two lines in tomcat/conf/context.xml
        
        

    5. Verify the session expiration time (minutes) in tomcat/conf/web.xml
        
            60
        

方案四:Spring-Session

    最终使用了本方案并成功实现session共享 ,步骤如下:

1. 引入Maven依赖


    org.springframework.session
    spring-session
    1.3.1.RELEASE


    org.springframework.data
    spring-data-redis
    1.8.4.RELEASE
    

    redis.clients
    jedis
    2.9.0


    org.springframework.data
    spring-data-commons
    1.8.4.RELEASE

2. 修改所有会存入redis的java对象,实现java.io.Serializable,并生成serialVersionUID,不然启动后会报java.io.NotSerializableException

3. 创建redis.properties,放在resources目录下

#host
redis.host=127.0.0.1
#port
redis.port=6379
#password
redis.password=
#db
redis.database=0

4. 创建spring-session.xml,其中路径需要根据实际情况调整



                         
    
    
    
      
    
    

    

5. 修改applicationContext.xml,引入spring-session.xml

 

6. web.xml中注册拦截器,记得要将以下代码放在SsoLoginFilter前面


    springSessionRepositoryFilter
    org.springframework.web.filter.DelegatingFilterProxy


    springSessionRepositoryFilter
    /*

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/343039.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号