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. maven - 配置强制从指定仓库拉取jar包

    从官方maven仓库拉取依赖,会超级慢.可配置settings.xml,强制从私服拉取 <mirrors> <mirror> <id>nexus-releases& ...

  2. Eclipse “cannot be resolved to a type”

    遇到这坑爹的问题,网上各种答案. 只有这个能解决我的问题,eclipse机制问题: Eclipse “cannot be resolved to a type”

  3. JSTL标签库学习3-fn

    fn的全称为functions, 就是提供一些方法,函数等. 主要是一些操作字符串的函数. fn:contains(str, str)显示用户浏览器,操作系统.可以从header中获取user-age ...

  4. HIBERNATE知识复习记录2-继承关系

    发现了一篇和我类似的学习尚硅谷视频写的文章,内容如下,比我说的详细全面,可以看一下: [原创]java WEB学习笔记87:Hibernate学习之路-- -映射 继承关系(subclass , jo ...

  5. Vue.js路由详解

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

  6. 吴裕雄 实战PYTHON编程(8)

    import pandas as pd df = pd.DataFrame( {"林大明":[65,92,78,83,70], "陈聪明":[90,72,76, ...

  7. org.springframework.stereotype 注解

    org.springframework.stereotype 1.@controller 控制器(注入服务) 2.@service 服务(注入dao) 3.@repository dao(实现dao访 ...

  8. vs2010下载Microsoft Visual Studio 2010 Express(vs2010中文版下载)速成官方合集正式版

    http://www.xiazaiba.com/html/1832.html VB.NET 2010 Express: 2KQT8-HV27P-GTTV9-2WBVV-M7X96VC++ 2010 E ...

  9. input disable手机端颜色兼容问题

    color: #5b636d; -webkit-text-fill-color: #5b636d; opacity: 1; -webkit-opacity: 1; input在移动端会有padding ...

  10. In case of failure

    In case of failure http://acm.hdu.edu.cn/showproblem.php?pid=2966 Time Limit: 60000/30000 MS (Java/O ...