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

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

相关文章

centos7基于keepalived+nginx部署k8s1.26.0高可用集群

《centos7基于keepalived+nginx部署k8s1.26.0高可用集群》Kubernetes是一个开源的容器编排平台,用于自动化地部署、扩展和管理容器化应用程序,在生产环境中,为了确保集... 目录一、初始化(所有节点都执行)二、安装containerd(所有节点都执行)三、安装docker-

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

SpringBoot实现基于URL和IP的访问频率限制

《SpringBoot实现基于URL和IP的访问频率限制》在现代Web应用中,接口被恶意刷新或暴力请求是一种常见的攻击手段,为了保护系统资源,需要对接口的访问频率进行限制,下面我们就来看看如何使用... 目录1. 引言2. 项目依赖3. 配置 Redis4. 创建拦截器5. 注册拦截器6. 创建控制器8.

SpringBoot如何访问jsp页面

《SpringBoot如何访问jsp页面》本文介绍了如何在SpringBoot项目中进行Web开发,包括创建项目、配置文件、添加依赖、控制层修改、测试效果以及在IDEA中进行配置的详细步骤... 目录SpringBoot如何访问JSP页python面简介实现步骤1. 首先创建的项目一定要是web项目2. 在

Jenkins中自动化部署Spring Boot项目的全过程

《Jenkins中自动化部署SpringBoot项目的全过程》:本文主要介绍如何使用Jenkins从Git仓库拉取SpringBoot项目并进行自动化部署,通过配置Jenkins任务,实现项目的... 目录准备工作启动 Jenkins配置 Jenkins创建及配置任务源码管理构建触发器构建构建后操作构建任务

java中VO PO DTO POJO BO DO对象的应用场景及使用方式

《java中VOPODTOPOJOBODO对象的应用场景及使用方式》文章介绍了Java开发中常用的几种对象类型及其应用场景,包括VO、PO、DTO、POJO、BO和DO等,并通过示例说明了它... 目录Java中VO PO DTO POJO BO DO对象的应用VO (View Object) - 视图对象

Linux限制ip访问的解决方案

《Linux限制ip访问的解决方案》为了修复安全扫描中发现的漏洞,我们需要对某些服务设置访问限制,具体来说,就是要确保只有指定的内部IP地址能够访问这些服务,所以本文给大家介绍了Linux限制ip访问... 目录背景:解决方案:使用Firewalld防火墙规则验证方法深度了解防火墙逻辑应用场景与扩展背景: