Java tomcat 实现二级域名session共享(良心共享)

来源:互联网 发布:java ftpclient引包 编辑:程序博客网 时间:2024/05/19 00:37

本文主要目的:一个用户在一台服务器的用户中心登录后产生的SESSION,然后访问在不同的服务器上的不同二级域名的应用都能共享到这个用户登录后的SESSION,可以说是单点登录。


用到的技术:J2E,Tomcat,Redis,Cookie


先阐述两个概念:

1)什么是一级域名和二级域名? 比如说你有一个域名是  aa.com  ,那么aa.com就是你这个域名的一级域名,www.aa.com和app.aa.com是这个域名的二级域名。可以简单地理解为,你的域名中含有多少个点(.)就是多少级域名(不知道这个理解是否完全正确哈)。

2)SESSION是根据什么划分的? 页面前端决定是不是同一个SESSION看三样东西:SESSION的Value、Domain和Path。如果这三样东西都相同,后台就是根据这三个值来维护SESSION的。这篇文章就是利用了这一特性。


所以,我想要做的事情是指在 passport.aa.com下面进行用户登录后,访问 www.aa.com和app.aa.com下的应用都是登录状态的。我相信你在看到我的这篇文章之前,可能已经在网上找了一大推的例子了。So am l,只可惜,并没有解决我的问题,很多方法都是无法使用的,所以才会有这篇文章的产生。废话不多说了,开始吧!


首先,如果是将SESSION交给spring-session来管理的话,这里有一点要注意下的是,生成的SESSION  ID的key是叫SESSION,不是JSESSIONID。对比下下面两图。



我使用的是Tomcat的 RedisSession 管理,下载  所依赖的jar包, 点击这里。将下载好的jar包放到Tomcat的lib下面,然后在Tomcat 的conf/context.xml文件上加上如下内容

    <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
    <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
    host="localhost"
    port="6379"
    password=""
    database="0"
    maxInactiveInterval="60" />

如图:



Okay,准备好这些工作后,我们看下后台的Java代码怎么写


        添加到SESSION的代码


        获取SESSION的代码


其实我们用的是一个小技巧就是利用Cookie来模仿一个SESSION ID 的 Key,Value,Domail,Path都一致的Session cookie。好了,将写好的项目部署到线上(这个要在线上,并使用域名来进行访问,否则不好测试)。

我部署的是一个多服务器多Tomcat下的结构,这里Tomcat都链接了同一个Redis服务器, 结构大概是这样:

服务器一 有一个 tomcat ,部署着刚才的写好的程序,目录名 是user;

服务器二有一个 tomcat ,部署着刚才的写好的程序,目录名 是node;

服务器三有一个 tomcat ,部署着刚才的写好的程序,目录名 是node;

服务器二和三使用Nginx的反向代理,做了负载。


好了,开始测试吧!



Okay,看到预期的两个一样的SESSION ID,尝试下不同的二级域名下是否能拿到数据:




So far so good!不停刷新下,发现都是能获取到数据的,如果我一开始的时候不做负载,多搞一个二级的域名来访问可能会更好理解些,但楼主就偷下懒不去修改这个缺点了,大家可以去尝试下!


=======================发愁的分割线============================

然而,事情还没有完!

如果我将所有的SESSION清除掉,先访问服务器二获取SESSION的接口,然后再访问服务器一的加SESSION的接口,那么结果会是怎样呢?



完蛋了,你会发现在请求服务器二的时候重新生成了一个SESSION ID ,两个ID的Value不一样了。

不用急,利用你一开始的加SESSION的道理,将SESSION也导回到服务器一的后台上去就可以了,在原来获取SESSION的代码上简单改进下:


这样在服务器一创建SESSION的时候也可能是用到服务器二的SESSION ID了!


圆满结束!代码获取,点这下载,再分享一款 Redis的可视化管理工具 redis-desktop-manager,点这下载









原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 京东买了东西超过七天想退货怎么办 微信买东西支付宝付款被骗怎么办 京东购物己付款卖家没发货怎么办 天猫先行退款卖家拒收怎么办 京东金条提前还款借不了怎么办 网银密码输入六次错误怎么办 迷失在时间和空间的交界处该怎么办 用卫生巾过后瘙痒起疹子了怎么办 装修公司倒闭了装修保修卡怎么办 丈夫把妻子的车抵押出去了怎么办 亚马逊海外购超过两万的额度怎么办 增值税申报表进项税转出忘填怎么办 一般纳税人注册下来后未营业怎么办 增值税税率把3错开成了5怎么办 在义乌做压痕加工老板拖欠钱怎么办 蓝洞棋牌是赌博输了几万怎么办 夏季来月经用卫生巾外阴瘙痒怎么办 用洗衣机洗衣服忘掏卫生纸了怎么办 剖腹产后一个月了还有血怎么办 剖腹产两个月同房后下面有血怎么办 剖腹产后月子里便秘有血怎么办 产后10天b超检查有血块怎么办 吃完优思明月经没有血块怎么办 刨腹产妇42天还有恶露怎么办 打完孩子第五天同房了出血了怎么办 打完孩子同房了出了一点血怎么办 宫腔镜检查一个月同房流血多怎么办 宫颈活检后三天同房有出血怎么办 顺产侧切两个月之后同房感染怎么办 顺产40天还有暗红色的恶露怎么办 来姨妈了没带卫生棉条去游泳怎么办 母猪肚子里面的小猪下不出来怎么办 刚生小猪的母猪肚子胀怎么办 吃了两天中药肚子还疼怎么办 怀孕期间垫了脚够东西怎么办 月经期垫卫生巾有边红肿有疹怎么办 四十天拉今天恶露特别多怎么办 顺产侧切出院几天后伤口裂开怎么办 产后十几撕裂用卫生巾疼怎么办 婴儿绑肚脐的棉黏在肚脐上怎么办 割完双眼皮第五天了很痒怎么办