zoukankan      html  css  js  c++  java
  • session springboot 会话共享实现

    写在前面:

          这个一个本人实现的 session 共享方案,使用Java 实现,在应用层解决session 多机器部署不一致问题。大家有好的建议可以评论我,谢过!


     springboot + redis 实现 tomcat 在应用层解决session 会话共享。

    gitee 地址:https://gitee.com/immer/session-java.git

    一、 环境配置

        jdk 1.8  、springboot 、 tomcat 、 redis

    二、 配置部署 session 

     1. 加入github的9个类至自己项目的src 源码目录

     2. 配置如下filter

        /**
         * session 管理器,使用redis 管理
         */
        @Bean
        public RedisSessionManger redisSessionClient(RedisTemplate redisTemplate){
            return new RedisSessionManger(new RedisSessionClient(redisTemplate));
        }
    
        /**
         * filter 重新包装 HttpServeltRequestWraper
         */
        @Bean
        public FilterRegistrationBean testFilterRegistration(RedisSessionManger redisSessionManger) {
            FilterRegistrationBean registration = new FilterRegistrationBean(new SessionClusterFilter(redisSessionManger));
            registration.addUrlPatterns("/*");
            registration.addInitParameter("paramName", "paramValue");
            registration.setName("sessionFilter");
            return registration;
        }
    

    三、使用demo(使用方式不变动,springmvc 注入即可)

        @RequestMapping("/hello")
        public String helloWorld(HttpServletRequest request) {
            HttpSession session = request.getSession();
            session.setAttribute("wei",123);
            Enumeration<String> enumeration = session.getAttributeNames();
            while (enumeration.hasMoreElements()){
                String attrName=  enumeration.nextElement();
                System.out.println("attrName:" + attrName +"attrValue:" + session.getAttribute(attrName));
            }
            return "Hello Spring-session";
        }  

    四、实现原理:

          使用 servlet filter 机制重新包装request , 重新实现session,最后使用redis存储session。

    五、和springSession 的实现异同

         1. 此部分实现类似spring-sesssion ,但去除了spring-session 中websocket 等session,代码量更少。

         2. 存储方式简单,session 属性修改即时刷线redis (spring-session 采用缓存异步的方式)

     六、好处

         有很多的方案可以实现session 共享刚,比如 ip hash; tomcat session 共享,这写方案都会影响上层多做任务,耦合性比较大。(如果某一天两个不同的项目部署在同一个tomcat 下,那么session 对我们来说不需要共享)

       

  • 相关阅读:
    RTC是DS1339,驱动采用的是rtc-ds1307.c
    hi3515 rtc驱动(ds1307/1339)驱动和示例
    qt5.4.1的imx6编译
    Python实现ID3(信息增益)
    Python实现nb(朴素贝叶斯)
    Python实现kNN(k邻近算法)
    Android实现地图服务
    Android实现传感器应用及位置服务
    Android实现KSOAP2访问WebService
    Android实现网络访问
  • 原文地址:https://www.cnblogs.com/immer/p/10202462.html
Copyright © 2011-2022 走看看