tomcat-redis-session-manager
版本: apache-tomcat-8.0.32、nginx-1.13.12、redis_3.2.1

github地址: https://github.com/mzd123/session_manager 读者可以直接下载体验一下。

实现:

1、下载:https://github.com/ran-jit/tomcat-cluster-redis-session-manager/wiki

2、解压之后。将jar包放入tomcat的lib中(注意是tomcat/lib中,不是我们自己项目的lib)

3、配置解压之后的redis-data-cache.properties(根据你的redis配置吧)。配置完将这个文件放入tomcat/conf文件夹中。

4、配置tomcat/cong/context.xml,增加如下两行。

<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

5、注意:因为tomcat-redis-session-manager这个版本的不同,classname会随着变化,2.0.4的版本是叫这两个。其实可以打开你下载的tomcat-cluster-redis-session-manager.jar看看他到底叫什么(不少小伙伴,本人第一次搞也是,网上代码一抄,发现tomcat启动就报类找不到。。。你classname都填错了,当然找不到了,能找到就奇怪了。。。)

测试:

1、nginx配置:

upstream mzd{
server 127.0.0.1:8091;
server 127.0.0.1:8090;
}

server {
listen 80;
server_name www.tuesdayma.com;

location / {
proxy_pass http://mzd;
proxy_connect_timeout 3s;
proxy_read_timeout 5s;
proxy_send_timeout 3s;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

}

2、准备两个tomcat,一个端口为8090,一个为8091

3、tomcat中jsp代码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page language="java" import="java.text.SimpleDateFormat"%>
<%
request.getSession().setAttribute("mzd","123");
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
String date=simpleDateFormat.format(new Date());
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>tomcat1</title>
</head>
<body>
SessionID:<%=session.getId()%>
当前时间为:<%=date%>
SessionPort:<%=request.getServerPort()%>
mzd的值为:<%=session.getAttribute("mzd")%>
<%
out.println("这是tomcat1");
%>
</body>
</html>

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page language="java" import="java.text.SimpleDateFormat"%>
<%
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
String date=simpleDateFormat.format(new Date());
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>tomcat2</title>
</head>
<body>
SessionID:<%=session.getId()%>
当前时间为:<%=date%>
SessionPort:<%=request.getServerPort()%>
mzd的值为:<%=session.getAttribute("mzd")%>
<%
out.println("这是tomcat2");
%>
</body>
</html>

4、启动两个tomcat和redis:如果不启动redis是会报错的。。。

结果:

测试结果很明显,sessionid没有改变。而且在tomcat1中设置的mzd值在tomcat2中jsp也能拿到这个值。

方法四:使用jwt
原理:放弃session机制,使用jwt机制。简单来说就是userid+随机数+签名加密生成一个token,前后端通信通过token来交互。客户端第一次请求登入之后,服务器端给客户端一个token,服务器将token作为key值,userid作为value值,30分钟作为有效时间存入redis中;客户端第二次访问controller之前进行拦截,判断是否有token,如果有token解密获取userid,然后取查询redis,token和userid是否匹配,如果匹配就允许访问controller,请求返回之后,服务器将重新生成新的token返回给客户端。简单来说就是每次请求成功之后token都会改变,token存在redis中,这样一来至于redis分发到哪个tomat并不影响,因为token是存在redis中的。。。
---------------------
作者:一只仰望天空的菜鸟
来源:CSDN
原文:https://blog.csdn.net/tuesdayma/article/details/81387862
版权声明:本文为博主原创文章,转载请附上博文链接!

nginx集群tomcat,session共享问题的更多相关文章

  1. Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享

    Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享 ============================= 蕃薯耀 2017年11月27日 http: ...

  2. 集群中Session共享解决方案分析

    一.为什么要Session共享 Session存储在服务器的内存中,比如Java中,Session存放在JVM的中,Session也可以持久化到file,MySQL,redis等,SessionID存 ...

  3. 集群间Session共享问题解决方案

    两个基本概念的生命周期 session: 当新客户端发现一个HTTP请求时服务端会创建一个session.并分配一个sessionID作为服务端来客户端的识别,session对象会保存在服务端.此时s ...

  4. CAS 集群部署session共享配置

    背景 前段时间,项目计划搞独立的登录鉴权中心,由于单独开发一套稳定的登录.鉴权代码,工作量大,最终的方案是对开源鉴权中心CAS(Central Authentication Service)作适配修改 ...

  5. Nginx+Tomcat+Memcached实现tomcat集群和session共享

    一.Nginx安装 详见前文:http://www.cnblogs.com/yixiwenwen/p/3574097.html 二.memcached安装和启动 详见前文:http://www.cnb ...

  6. 关于 tomcat 集群中 session 共享的三种方法

    前两种均需要使用 memcached 或redis 存储 session ,最后一种使用 terracotta 服务器共享. 建议使用 redis,不仅仅因为它可以将缓存的内容持久化,还因为它支持的单 ...

  7. tomcat集群及session共享

    一般来说,java web app主要用作两个领域: 1.api.api一般是无状态的,所以无需考虑session共享的问题 2.传统web应用和网站,如crm,oa,erp,b2c,bbs等.尤其b ...

  8. Tomcat集群的session共享

    配置Tomcat的session共享可以有三种解决方案: 第一种是以负载均衡服务器本身提供的session共享策略,每种服务器的配置是不一样的并且nginx本身是没有的. 第二种是利用web容器本身的 ...

  9. 基于tomcat集群做session共享

    前端代理服务器nginx:192.168.223.136 tomcat服务器:采用的一台多实例192.168.223.146:8081,192.168.223.146:8082(如何构建多实例tomc ...

  10. Tomcat 集群 + Redis Session 共享出现 Session 瞬间失效问题

    写在前面的话 写这篇博客出于公司最近要迁移到新的云上面且对之前的资源,架构做一个升级. 本来是一个不大的项目,旧环境旧一个 TOMCAT 跑起来,不过出于高可用考虑,新环境决定使用 TOMCAT 集群 ...

随机推荐

  1. VBA 浏览文件夹

    Private Function SelectFolder() As String        With Application.FileDialog(msoFileDialogFolderPick ...

  2. 可视化库-seaborn-回归分析绘图(第五天)

    1. sns.regplot() 和 sns.lmplot() 绘制回归曲线 import numpy as np import pandas as pd from scipy import stat ...

  3. python练习题:三级菜单

    需求:可依次选择进入各子菜单可从任意一层往回退到上一层可从任意一层退出程序所需新知识点:列表.字典 测试环境:win7系统,python3.7.0,工具:pycharm-community-2018. ...

  4. windows10配置java开发环境

    一.下载jdk 二.安装jdk路径,这个路径不能包含中文名 三.系统会提示安装jre,安装目录不要是jdk的安装目录,否则会覆盖掉jdk目录下的jre目录 四. .;%JAVA_HOME%\lib;% ...

  5. Vue.js路由详解

    有时候,我们在用vue的时候会有这样的需求,比如一个管理系统,点了左边的菜单栏,右边跳转到一个新的页面中,而且刷新的时候还会停留在原来打开的页面. 又或者,一个页面中几个不同的画面来回点击切换,这两种 ...

  6. PPT汇报 评审表

    评审表 团队编号 团队名称 团队项目名称 格式评审 内容评审 PPT评审 演讲评审 优点 存在问题(至少提3点) 建议 01 牛肉面不要牛肉不要面 02 正义联盟 我是一个图书小平台 03 什么队 & ...

  7. 01Tensorflow学习之Tensorflow基本介绍

    1 tensorflow简介 TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理.Tensor(张量)意味着N维数组,Flow(流)意味着基 ...

  8. javascript 函数对象

    http://hi.baidu.com/gdancer/blog/item/a59e2c12479b4e54f919b814.html jQuery的一些写法就是基于这篇文章的原理的..     函数 ...

  9. Week4-作业1:阅读笔记与思考

    我在这三天时间里阅读了<构建之法>的第四章和第十七章,产生了一些疑问和深层次的思考. 第四章 问题1: 书中第68页提到“注释(包括所有源代码)应该只用ASCII字符,不要用中文或其他特殊 ...

  10. debug-stripped.ap_' specified for property 'resourceFile' does not exist.(转载)

    1.错误描述 更新Android Studio到2.0版本后,出现了编译失败的问题,我clean project然后重新编译还是出现抑郁的问题,问题具体描述如下所示: Error:A problem ...