同一 tomcat 不同项目 session 共享实现

news2024/9/27 23:32:46

说明

这里仅讨论 同一个tomcat,部署了两个工程(两个war包)。不涉及不同tomcat,不涉及集群

背景

tomcat中的工程A包含用户登录、退出、权限控制等功能;工程B包含业务功能接口。工程A将用户登录信息加密响应给前端,前端在请求工程B时将用户加密信息放入请求header,工程B解密获得用户信息。
这种方式在安全扫描中提示存在垂直越权问题。即低权限的用户如果拿到高权限用户的加密信息,就可以拿到高权限用户的数据

修复:

将用户信息存在session中

步骤1

服务器tomcat安装目录,conf文件夹下,sever.xml 文件标签新增配置

    <Host name="localhost"  appBase="webapps"  unpackWARs="true" autoDeploy="true">
              
                <Context path="/biz-m-rest" reloadable="true"  crossContext="true" sessionCookiePath="/" />

                <Context path="/mams-rest" reloadable="true" crossContext="true" sessionCookiePath="/" />

      </Host>

开启biz-m-rest、mams-rest服务session共享,sessionCookiePath=“/” 配置很重要,没有该配置 两个工程中打印的sessionId 不同

步骤2

工程A登录接口封装方法,将用户信息存入session中,sessionId 为key
网上很多博客用固定的key(session字符串),固定key虽然实现session共享,但是没有解决安全问题。本方法使用动态 sessionId 作为key

/*
*regUser参数为用户登录后,查询数据库封装的当前用户信息
*/
private void setUserInfoSissioin(SysRegisterUser regUser,HttpServletRequest request){
		HttpSession httpSession = request.getSession();
		String sessionId = httpSession.getId();
		logger.info("当前session id是=============:"+sessionId);
		Object jsonRegUser = JSON.toJSON(regUser);
		httpSession.setAttribute("user",jsonRegUser);
		ServletContext context = httpSession.getServletContext();
		context.setAttribute(sessionId, httpSession);
	}

步骤3

工程B中通过sessionId 获得用户信息

/*
	 *通过session 中保存的用户信息,和crctoken中解密的用户id 比较,相同返回true;否则返回false
	 *
	 */
	public Boolean isLoginUser(HttpServletRequest httpServletRequest){
		Boolean bool = false;
		String crcTokenUserId = getLoginUserId(); //cookie中解密的用户id(不安全)
		try {
			HttpServletRequest request = getRequest();
			String sessionId = request.getSession().getId();
			LOGGER.info("====biz_service session=====================start==="+sessionId);
			ServletContext Context = request.getServletContext();
			ServletContext Context1= Context.getContext("/mams-rest");  //共享session,和tomcat sever.xml 中配置一致

			if(Context1 !=null && !Context1.equals("")){
				HttpSession sess=(HttpSession)Context1.getAttribute(sessionId);
				if(sess.getAttribute("user")!=null){
					JSONObject jsonObject = new JSONObject().parseObject(sess.getAttribute("user").toString());
					String sessionUserId = jsonObject.getString("userId");  //session 中保存的用户id
					LOGGER.info("tomcat 共享session 测试=====================start====sessionUserId=002==="+sessionUserId);
					if(StringUtils.isNotBlank(sessionUserId)&&StringUtils.isNotBlank(crcTokenUserId)&&crcTokenUserId.equals(sessionUserId)){
						bool = true;
					}
				}
			}

		}catch (Exception e){
			//报错说明用户还没登录,拿不到session信息
			LOGGER.error("=============请先登录==========");
			e.printStackTrace();
		}

		return bool;
	}

测试:
工程A打印的sessionId
在这里插入图片描述
工程B打印的sessionId
在这里插入图片描述

动态获取工程A和工程B的sessionId,id相同,工程B才可以正确获取工程A中存的用户信息
保证工程A和工程B 有相同的sessionId 依赖 tomcat sever.xml中的配置

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Java校园快递代取系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

NLP(五十五)LangChain入门

LangChain简介 背景 由于ChatGPT的发行&#xff0c;大模型&#xff08;Large Language Model, LLM&#xff09;已经变得非常流行了。也许你可能没有足够的资金和计算资源从头开始训练大模型&#xff0c;但你仍然可以使用大模型来做一些比较酷的事情&#xff0c;比如&#xff1…

大数据开发薪资怎么样

想必想入行的小伙伴在正式开始学习之前&#xff0c;都会考虑薪资这个可观因素。有不少小伙伴是看中了大数据的薪资选择加入这个行业的&#xff0c;想知道以后能找什么工作以及工作薪水&#xff0c;那不妨让我们以数据的方式来展示一下~ 猎聘大数据研究院发布了《2022未来人才就…

制造执行系统(MES)的核心功能是什么?

制造执行系统&#xff08;MES&#xff09;的核心功能是什么? 01 什么是MES 制造执行系统&#xff08;MES&#xff09;是一种用于监控、控制和优化制造过程的软件系统。它通过与企业资源计划&#xff08;ERP&#xff09;系统和自动化系统的集成&#xff0c;实现对生产过程的管…

小红书品牌营销策略分析!品牌方必看

小红书在品牌营销方面的策略非常成功&#xff0c;特别是在口碑营销、内容营销和小红书素人达人种草营销方面的运用。以下是伯乐网络传媒对这些策略的详细分析&#xff0c;想要做小红书营销推广的商家必看&#xff01; 一、口碑营销 对于小红书APP来说,口碑营销的传播主体就是小…

Android build.gradle文件

一、ABI&#xff08;Application Binary Interface&#xff09;应用程序二进制接口 其实ABI可以不设置&#xff0c;这样编译时&#xff0c;就会将项目里所有依赖资源包里的so库都打到最终的apk里。 但是&#xff0c;ABI支持多的话&#xff0c;apk也会大&#xff0c;所以一般只支…

MySQL数据库——存储引擎

MySQL数据库——存储引擎 一、MySQL存储引擎1.存储引擎的概念2.常用存储引擎3.存储引擎的分类4.企业选择存储引擎依据 二、MyISAM 存储引擎1 MyISAM的相关了解2 MyISAM的特点3 MyISAM表支持3种不同的存储格式4.MyISAM适用的生产场景 三、InnoDB 存储引擎1 InnoDB的相关了解2 In…

探索NDK和逆向工程在Android开发中的力量

NDK是什么&#xff1f; NDK&#xff08;Native Development Kit&#xff09;是一组工具集&#xff0c;用于在Android平台上开发和构建使用C或其他本地语言编写的应用程序。NDK提供了一些库和工具&#xff0c;使开发人员能够在应用中使用本地代码&#xff0c;并实现与Java代码的…

ant+svn项目打包部署错误记录

安装ant可以参考下这个 http://t.csdn.cn/kx1ZX 第一个错误&#xff0c;原因是缺少ant-contrib.jar导致&#xff0c;将对应jar包放入ant的lib下即可 [taskdef] Could not load definitions from resource net/sf/antcontrib/antcontrib.properties. It could not be found. B…

低/无代码平台:公民开发和公民自动化,让人人成为软件开发者

在企业数字化转型领域&#xff0c;公民自动化是一个备受关注的概念。虽然这个词汇可能有些“陌生又熟悉”&#xff0c;但在公民开发运动中已经引起了不小的轰动。那么&#xff0c;什么是公民自动化&#xff1f;它与公民开发之间又有哪些不同&#xff1f; 公民开发是什么&#x…

ATTCK 红日靶场(三)-简记

Step 1-》信息收集 端口 nmap -p -A -sV 192.168.1.110 目录 dirsearch -u 192.168.1.110 --exelude-status 400,401,403,404,501,503 访问 ip/1.php -->根目录、禁用函数 ip/robots.txt !!!------- IP/administrator-->>joomla-cms IP/configuration.php~--&…

利用uniapp创建移动端项目

目录 申请微信开发者账号 一、特殊声明 二、申请微信开发者账号 创建小程序项目 一、引言 二、创建小程序工程 三、uni-app框架简介 初识uniapp项目 一、uni-app工程目录结构 二、创建练习页面 创建登录页面 一、拷贝所有素材文件 二、创建登陆页面 创建注册页面 …

【机器学习与遥感】sklearn与rasterio实现遥感影像监督分类

在学习遥感的过程中&#xff0c;我们都了解到了监督分类与非监督分类&#xff0c;二者是遥感解译的基础。之前更多的是使用Erdas与ENVI来进行这两种分类。这里使用python语言&#xff0c;基于机器学习库sklearn与遥感影像处理库rasterio&#xff0c;使用kmeans动态聚类方法实现…

实施计划:项目成功执行的关键

为了增加成功的机会&#xff0c;特别是当涉及到大型或复杂的项目时&#xff0c;团队可能需要关于项目执行过程的额外指导。实施计划可以用于这一目的。 简而言之&#xff0c;项目实施计划是一份文件&#xff0c;作为项目如何执行的路线图。它规定了项目完成过程中的步骤&#…

<C++> C++11右值引用

C11右值引用 1.左值引用和右值引用 传统的C语法中就有引用的语法&#xff0c;而C11中新增了的右值引用语法特性&#xff0c;所以从现在开始我们之前学习的引用就叫做左值引用。无论左值引用还是右值引用&#xff0c;都是给对象取别名。 什么是左值&#xff1f;什么是左值引用…

sonar-scanner-Windows本地Python代码检查使用方法【免费下载sonar-scanner验证有效】

背景介绍&#xff1a; sonar作为开源的代码扫描工具&#xff0c;sonar-scanner是windows扫描器。SonarQube是一个开源的代码质量管理平台&#xff0c;可以将 sonar-scanner扫描的结果进行分析。 公司有搭建SonarQube质量管理平台&#xff0c;支持本地扫描和gitlab集成扫描。现…

locust学习教程(7) - docker运行单个locust脚本

目录 1、安装 docker 2、下载镜像 3、运行脚本 4、开始压测 &#x1f381;更多干货 1、安装 docker widnows安装docker客户端blog.csdn.net/weixin_4545… 实施步骤&#xff1a; 第一步、启动docker客户端 2、下载镜像 cmd窗口下载locust镜像文件&#xff1a;docker pul…

隐私链或成监管和虚拟货币犯罪打击新挑战?

匿名币、混币器等是大家在当前案件侦办中常遇到的资金追踪“拦路虎”&#xff0c;而在区块链中还有一些隐私保护方案&#xff08;隐藏交易相关信息&#xff09;&#xff0c;可能大家较少涉猎&#xff0c;在当前的区块链相关案件中也还没有明显的表现&#xff0c;我们也希望通过…

深度解析:分布式事务解决方案大盘点,助你轻松应对复杂业务场景

随着互联网的发展&#xff0c;分布式系统已经成为了现代软件开发的主流。在分布式系统中&#xff0c;多个节点之间需要协同工作&#xff0c;以完成一些复杂的任务。然而&#xff0c;由于节点之间的网络延迟、故障等问题&#xff0c;这些节点之间可能会出现数据不一致的情况&…

华为OD机试真题 JavaScript 实现【最多获得的短信条数】【2023Q1 100分】,附详细解题思路

一、题目描述 某云短信厂商&#xff0c;为庆祝国庆&#xff0c;推出充值优惠活动。现在给出客户预算&#xff0c;和优惠售价序列&#xff0c;求最多可获得的短信总条数。 二、输入描述 第一行客户预算M&#xff0c;其中 0 ≤ M ≤ 10^6第二行给出售价表&#xff0c; P1, P2,…