报表单独部署时跨应用访问报表安全控制

2023-10-17 12:32

本文主要是介绍报表单独部署时跨应用访问报表安全控制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

润乾报表与用户的系统集成,一般有两种方案。一是集成到用户系统中。二是将润乾单独部署到一个应用下。

两种方案各有利弊:第一种方案对于安全性等方面可以统一管理,但是报表本身如果数据量大并发大造成的压力会直接影响用户自己的系统。第二种方案在报表服务器承受压力过大数据量过大的时候,不会影响到用户本身的系统,也就是说就算报表服务器压力饱和进入等待状态,用户的系统也可以正常的使用,众所周知润乾报表的调用一般直接通过url的方式进行调用,那么第二种方案中的url就无法被用户系统所控制,造成了一定的安全隐患。

 

下面就介绍几种解决此类问题的方案之中的一种:通过ip在过滤器中判断权限。

 

案例场景:

通过用户系统访问一张报表时,当然会带着一些用户信息或是其他参数传递过来。如果这时这个url被其他人复制或者记住,拿到其他客户机上直接访问,由于采用的是第二种方案,用户系统并不能控制,就会导致信息的泄漏。

 

解决思路:

这时我们可以采取从用户系统获取客户端ip然后拼成访问报表的参数,传递到报表服务器,然后在报表服务器中对该ip是否有权限打开这张报表进行判断,如果有权限继续访问,如果没有权限跳转到错误页面或者用户登陆页面等。

 

实现方法:

一、首先搭建报表服务器,这里以润乾自带demo为例。

正常访问报表url为:http://127.0.0.1:6001/demo/reportJsp/showReport.jsp?raq=test.raq

这个url就当做用户系统请求一张报表的url,这时可以在这个url后加上登录用户系统的ip,假设用户以192.168.0.58这个ip登陆的,那么url为:http://127.0.0.1:6001/demo/reportJsp/showReport.jsp?raq=test.raq&ipValue=192.168.0.58

二、写一个filter

在doFilter中获取url中带的的参数以及客户端的ip,然后进行比较

public void doFilter(ServletRequest request, ServletResponse response,

           FilterChain filterChain) throws IOException, ServletException {

       // 过滤器获取客户端IP地址

       String ip = ((HttpServletRequest) request).getHeader(“x-forwarded-for”);

       if (ip == null || ip.length() == 0 || “unknown”.equalsIgnoreCase(ip)) {

           ip = ((HttpServletRequest) request).getHeader(“Proxy-Client-IP”);

       }

       if (ip == null || ip.length() == 0 || “unknown”.equalsIgnoreCase(ip)) {

           ip = ((HttpServletRequest) request).getHeader(“WL-Proxy-Client-IP”);

       }

       if (ip == null || ip.length() == 0 || “unknown”.equalsIgnoreCase(ip)) {

           ip = ((HttpServletRequest) request).getHeader(“HTTP_CLIENT_IP”);

       }

       if (ip == null || ip.length() == 0 || “unknown”.equalsIgnoreCase(ip)) {

           ip = ((HttpServletRequest) request)

                  .getHeader(“HTTP_X_FORWARDED_FOR”);

       }

       if (ip == null || ip.length() == 0 || “unknown”.equalsIgnoreCase(ip)) {

           ip = request.getRemoteAddr();

       }

       // 根据获取的客户端IP,进行判断,返回相关结果为isValid=true

       boolean isValid = false;

       String ipValue = request.getParameter(“ipValue”);

       if (ip.equals(ipValue)) {// 自行增加条件

           isValid = true;

       }

       // 如果满足条件允许登录,否则调准

       if (isValid) {

           request.setCharacterEncoding(“GBK”);

           filterChain.doFilter(request, response);

       } else {

           request.setCharacterEncoding(“GBK”);

           // 定向到Error页面,或者指定跳到登录界面

           request.getRequestDispatcher(“/reportJsp/iperror.jsp”).forward(

                  request, response);

       }

    }

 

三、在web.xml中加入filter配置

<filter>

      <filter-name>IpFilter</filter-name>

       <filter-class>com.runqian.filter.IpFilter</filter-class>

     </filter>

    <filter-mapping>

    <filter-name>IpFilter</filter-name>

      <url-pattern>/*</url-pattern>

     </filter-mapping>

 

然后重启服务,如果将url拷贝到其他ip的客户端访问,救活跳转到相应的错误页面

这篇关于报表单独部署时跨应用访问报表安全控制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/225439

相关文章

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

zoj3820(树的直径的应用)

题意:在一颗树上找两个点,使得所有点到选择与其更近的一个点的距离的最大值最小。 思路:如果是选择一个点的话,那么点就是直径的中点。现在考虑两个点的情况,先求树的直径,再把直径最中间的边去掉,再求剩下的两个子树中直径的中点。 代码如下: #include <stdio.h>#include <string.h>#include <algorithm>#include <map>#

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

AI行业应用(不定期更新)

ChatPDF 可以让你上传一个 PDF 文件,然后针对这个 PDF 进行小结和提问。你可以把各种各样你要研究的分析报告交给它,快速获取到想要知道的信息。https://www.chatpdf.com/