码迷,mamicode.com
首页 > 编程语言 > 详细

session springboot 会话共享实现

时间:2018-12-31 19:03:02      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:cli   sys   div   request   map   包装   ring   实现   管理器   

写在前面:

      这个一个本人实现的 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 对我们来说不需要共享)

   

session springboot 会话共享实现

标签:cli   sys   div   request   map   包装   ring   实现   管理器   

原文地址:https://www.cnblogs.com/immer/p/10202462.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!