Tomcat:Session ID保持会话

目录

前言

​一、部署环境

二、部署nginx反向代理服务器

三、部署tomcat服务器1

四、部署tomcat服务器2

五、客户端测试(Session ID不断变动)

六、配置Session ID会话保持

七、客户端测试(Session ID保持)


前言

此次实验是Tomcat后端服务器如何做Session ID会话保持

一、部署环境

关闭所有设备的防火墙和核心防护

[root@localhost ~]#systemctl stop firewalld
[root@localhost ~]#setenforce 0

安装设备对应的服务软件,如nginx反向代理服务器安装nginx软件,Tomcat服务器1和2需安装tomcat软件

#nginx反向代理服务器
[root@localhost ~]#yum install epel-release.noarch -y
[root@localhost ~]#yum install -y nginx
[root@localhost ~]#systemctl start nginx

 #Tomcat服务器1和2需安装tomcat软件 

#安装jdk工具,事先准备好oraclejdk二进制包
[root@localhost ~]#cd /opt
[root@localhost opt]#rz -E
rz waiting to receive.
[root@localhost opt]#ls
jdk-8u291-linux-x64.tar.gz
[root@localhost opt]#tar xf jdk-8u291-linux-x64.tar.gz -C /usr/local/
[root@localhost opt]#cd /usr/local
[root@localhost local]#ls
bin  etc  games  include  jdk1.8.0_291  lib  lib64  libexec  sbin  share  src
[root@localhost local]#ln -s jdk1.8.0_291/ jdk
[root@localhost local]#vim /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/
[root@localhost local]#. /etc/profile.d/jdk.sh
[root@localhost local]#java -version
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)#安装tomcat,事先准备好tomcat二进制安装包
[root@localhost local]#cd /opt
[root@localhost opt]#rz -E
rz waiting to receive.
[root@localhost opt]#tar xf apache-tomcat-9.0.16.tar.gz 
[root@localhost opt]#cp -r /opt/apache-tomcat-9.0.16 /usr/local/tomcat
[root@localhost opt]#useradd -M -s /sbin/nologin tomcat
[root@localhost opt]#chown -R tomcat:tomcat /usr/local/tomcat/
[root@localhost opt]#cat > /usr/lib/systemd/system/tomcat.service <<EOF
[Unit]
Description=Tomcat
After=syslog.target network.target[Service]
Type=forking
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
RestartSec=3
PrivateTmp=true
User=tomcat
Group=tomcat[Install]
WantedBy=multi-user.targetEOF
[root@localhost opt]#systemctl daemon-reload
[root@localhost opt]#systemctl start tomcat.service

二、部署nginx反向代理服务器

[root@localhost ~]#vim /etc/nginx/nginx.conf
upstream tomcat {server 172.16.12.11:8080;server 172.16.12.12:8080;}location ~* \.jsp$ {proxy_pass http://tomcat;}
[root@localhost ~]#nginx -t
[root@localhost ~]#systemctl restart nginx

三、部署tomcat服务器1

[root@localhost ~]#cd /usr/local/tomcat/webapps/ROOT/
[root@localhost ROOT]#mv index.jsp index.jsp.bak
[root@localhost ROOT]#cat > index.jsp << EOF
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>tomcat test</title>
</head>
<body>
<div>On <%=request.getServerName() %></div>
<div><%=request.getLocalAddr() + ":" + request.getLocalPort() %></div>
<div>SessionID = <span style="color:blue"><%=session.getId() %></span></div>
<%=new Date()%>
</body>
</html>
EOF
[root@localhost ROOT]#systemctl restart tomcat.service

四、部署tomcat服务器2

[root@localhost opt]#cd /usr/local/tomcat/webapps/ROOT/
[root@localhost ROOT]#mv index.jsp index.jsp.bak
[root@localhost ROOT]#cat > index.jsp << EOF
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>tomcat test</title>
</head>
<body>
<div>On <%=request.getServerName() %></div>
<div><%=request.getLocalAddr() + ":" + request.getLocalPort() %></div>
<div>SessionID = <span style="color:blue"><%=session.getId() %></span></div>
<%=new Date()%>
</body>
</html>
EOF
[root@localhost ROOT]#systemctl restart tomcat.service

五、客户端测试(Session ID不断变动)

客户端访问:http://nginx反向代理服务器IP地址/index.jsp

在实际环境中,不允许用户的Session ID不断变化 

  • 当客户端第一次访问nginx反向代理服务器,nginx反向代理服务器会通过轮询的算法,调度到Tomcat服务器1上处理,由于是第一次访问,客户度的Cookie缓存会记录,不会有Session ID,Tomcat服务器1会生成新的Session ID传输给客户端,客户端会将这个新的Session ID记录下来
  • 当客户端第二次访问的时候,Nginx反向代理服务器又可能通过轮询的算法,将服务请求调度到Tomcat服务器2上处理,Tomcat服务器2是没有客户端传输来的Session ID1的,Tomcat2服务器认为客户端要生成新的Session ID,于是Tomcat2服务器将新的Session ID2传输给客户端,客户端会更新Session ID,将刚刚的Session ID1更改为Session ID2;
  • 当客户端第三次访问的时候,客户端带着Session ID2去Nginx代理服务器,Nginx反向代理服务器将客户端请求又调度到Tomcat服务器1上,Tomcat服务器1并没有Session ID2,于是又将新生成的Session ID3传输给客户端,这样会有很不好的客户端体验,所以我们可以根据修改Tomcat配置文件来进行会话保持

六、配置Session ID会话保持

Tomcat会话保持官方说明:https://tomcat.apache.org/tomcat-9.0-doc/cluster-howto.html

tomcat服务器1配置: 

[root@node2 ROOT]#vim /usr/local/tomcat/conf/server.xml 
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"channelSendOptions="8"><Manager className="org.apache.catalina.ha.session.DeltaManager"expireSessionsOnShutdown="false"notifyListenersOnReplication="true"/><Channel className="org.apache.catalina.tribes.group.GroupChannel"><Membership className="org.apache.catalina.tribes.membership.McastService"address="228.0.0.4"port="45564"frequency="500"dropTime="3000"/><Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"address="172.16.12.11"port="4000"autoBind="100"selectorTimeout="5000"maxThreads="6"/><Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"><Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/></Sender><Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/><Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/></Channel><Valve className="org.apache.catalina.ha.tcp.ReplicationValve"filter=""/><Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/><Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"tempDir="/tmp/war-temp/"deployDir="/tmp/war-deploy/"watchDir="/tmp/war-listen/"watchEnabled="false"/><ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/></Cluster>

[root@localhost ROOT]#vim /usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml 
<distributable/>
[root@localhost ROOT]#systemctl restart tomcat.service
[root@localhost ROOT]#systemctl status tomcat.service

tomcat服务器2配置: 

[root@localhost ROOT]#scp /usr/local/tomcat/conf/server.xml 172.16.12.12:/opt
[root@localhost ROOT]#scp /usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml 172.16.12.12:/opt

[root@localhost ROOT]#cd /opt
[root@localhost opt]#cp server.xml /usr/local/tomcat/conf/server.xml 
cp:是否覆盖"/usr/local/tomcat/conf/server.xml"? y
[root@localhost opt]#cp web.xml /usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml
cp:是否覆盖"/usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml"? y

[root@localhost opt]#vim /usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml
修改IP地址(tomcat服务器2的IP)
[root@localhost opt]#systemctl restart tomcat.service 
[root@localhost opt]#systemctl status tomcat.service

七、客户端测试(Session ID保持)

客户端访问:http://nginx反向代理服务器IP地址/index.jsp

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/549555.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

研究人员发现 OpenAI ChatGPT、Google Gemini 的漏洞

自 OpenAI 推出 ChatGPT 以来&#xff0c;生成式 AI 聊天机器人的数量及其在企业中的采用率在一年多时间里呈爆炸式增长&#xff0c;但网络安全专业人士的担忧也随之增加&#xff0c;他们不仅担心威胁组织对新兴技术的使用&#xff0c;还担心大型网络的安全性及模型&#xff08…

分类预测 | Matlab实现BiTCN双向时间卷积神经网络数据分类预测/故障识别

分类预测 | Matlab实现BiTCN双向时间卷积神经网络数据分类预测/故障识别 目录 分类预测 | Matlab实现BiTCN双向时间卷积神经网络数据分类预测/故障识别分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现BiTCN双向时间卷积神经网络数据分类预测/故障识别。 2.自…

计算机生物科技在基因编辑中的应用及其前景

一、引言 基因编辑&#xff0c;作为一种能够精准修改生物体基因组的技术&#xff0c;近年来受到了广泛的关注。 而计算机生物科技作为连接计算机科学与生物学的桥梁&#xff0c;为基因编辑技术的快速发展提供了强大的支持。通过利用计算机算法和数据分析方法&#xff0c;研究人…

windows取证

Windows事件日志分析 使用Windows事件日志查看器&#xff0c;打开实验文档“security01.evtx”。按“日期和时间”对日志进行分组统计&#xff1b;按“事件ID”对日志进行分组统计&#xff1a; 问题&#xff1a;日志中是否有用户登录失败的记录。如果有&#xff0c;请按“登录…

信息系统项目管理师019:存储和数据库(2信息技术发展—2.1信息技术及其发展—2.1.3存储和数据库)

文章目录 2.1.3 存储和数据库1.存储技术2.数据结构模型3.常用数据库类型4.数据仓库 记忆要点总结 2.1.3 存储和数据库 1.存储技术 存储分类根据服务器类型分为&#xff1a;封闭系统的存储和开放系统的存储。封闭系统主要指大型机等服务器。开放系统指基于包括麒麟、欧拉、UNIX…

java 类和对象

1、什么是对象&#xff1f; 万物皆对象&#xff0c;客观存在的事物皆为对象。大到名胜古迹&#xff08;万里长城、秦始皇兵马俑等&#xff09;&#xff0c;小到生活中的小物品&#xff08;水杯、钢笔、手机等&#xff09;&#xff0c;只要是客观存在的事物都可以称之为对象。 …

【随笔】汇编(寄存器、内存模型、常用指令、语法)

文章目录 一、简介二、寄存器三、内存模型3.1 Heap3.2 Stack 四、指令4.1 示例4.2 语法4.3常用指令 一、简介 汇编语言&#xff08;英语&#xff1a;assembly language&#xff09;是任何一种用于电子计算机、微处理器、微控制器&#xff0c;或其他可编程器件的低级语言。在不…

11 html 学习/作业

<!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><a href"./index.html">首页</a><a href"https://www.baidu.com/">百度</a><a h…

数字化社会的新纪元:揭秘 Web3 的社交网络

随着区块链技术的不断发展和普及&#xff0c;Web3作为其重要组成部分&#xff0c;正逐渐改变着社交网络的面貌。Web3的出现不仅为社交网络带来了新的技术和理念&#xff0c;还为用户提供了更加开放、透明和安全的社交体验。本文将深入探讨Web3的社交网络&#xff0c;揭示其在数…

ev多域名ssl证书2000元一年送一月

多域名SSL证书是一种特殊的数字证书产品。多域名SSL证书可以同时保护多个独立的域名站点&#xff0c;这些域名站点可以是多个主域名、子域名&#xff0c;多域名SSL证书可以为它们提供传输数据加密服务以及身份认证服务。EV多域名SSL证书具有更高的安全性&#xff0c;所以一些金…

怎么做好独立站的SEO优化

随着全球贸易的蓬勃发展&#xff0c;越来越多的企业开始关注外贸市场&#xff0c;并将目光投向了外贸网站。然而&#xff0c;在竞争激烈的外贸市场中&#xff0c;如何写出吸引人的文章&#xff0c;以及如何优化网站以在搜索引擎中脱颖而出&#xff0c;成为了外贸独立网站必须面…

数据机构-2

线性表 概念 顺序表 示例&#xff1a;创建一个存储学生信息的顺序表 表头&#xff08;Tlen总长度&#xff0c; Clen当前长度&#xff09; 函数 #include <seqlist.c> #include <stdio.h> #include <stdlib.h> #include "seqlist.h" #include &…