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

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

相关文章

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

Python使用Tkinter打造一个完整的桌面应用

《Python使用Tkinter打造一个完整的桌面应用》在Python生态中,Tkinter就像一把瑞士军刀,它没有花哨的特效,却能快速搭建出实用的图形界面,作为Python自带的标准库,无需安装即可... 目录一、界面搭建:像搭积木一样组合控件二、菜单系统:给应用装上“控制中枢”三、事件驱动:让界面“活”

如何确定哪些软件是Mac系统自带的? Mac系统内置应用查看技巧

《如何确定哪些软件是Mac系统自带的?Mac系统内置应用查看技巧》如何确定哪些软件是Mac系统自带的?mac系统中有很多自带的应用,想要看看哪些是系统自带,该怎么查看呢?下面我们就来看看Mac系统内... 在MAC电脑上,可以使用以下方法来确定哪些软件是系统自带的:1.应用程序文件夹打开应用程序文件夹

Python Flask 库及应用场景

《PythonFlask库及应用场景》Flask是Python生态中​轻量级且高度灵活的Web开发框架,基于WerkzeugWSGI工具库和Jinja2模板引擎构建,下面给大家介绍PythonFl... 目录一、Flask 库简介二、核心组件与架构三、常用函数与核心操作 ​1. 基础应用搭建​2. 路由与参

Spring Boot中的YML配置列表及应用小结

《SpringBoot中的YML配置列表及应用小结》在SpringBoot中使用YAML进行列表的配置不仅简洁明了,还能提高代码的可读性和可维护性,:本文主要介绍SpringBoot中的YML配... 目录YAML列表的基础语法在Spring Boot中的应用从YAML读取列表列表中的复杂对象其他注意事项总

电脑系统Hosts文件原理和应用分享

《电脑系统Hosts文件原理和应用分享》Hosts是一个没有扩展名的系统文件,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应... Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应

CSS 样式表的四种应用方式及css注释的应用小结

《CSS样式表的四种应用方式及css注释的应用小结》:本文主要介绍了CSS样式表的四种应用方式及css注释的应用小结,本文通过实例代码给大家介绍的非常详细,详细内容请阅读本文,希望能对你有所帮助... 一、外部 css(推荐方式)定义:将 CSS 代码保存为独立的 .css 文件,通过 <link> 标签

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

NGINX 配置内网访问的实现步骤

《NGINX配置内网访问的实现步骤》本文主要介绍了NGINX配置内网访问的实现步骤,Nginx的geo模块限制域名访问权限,仅允许内网/办公室IP访问,具有一定的参考价值,感兴趣的可以了解一下... 目录需求1. geo 模块配置2. 访问控制判断3. 错误页面配置4. 一个完整的配置参考文档需求我们有一

Python使用Reflex构建现代Web应用的完全指南

《Python使用Reflex构建现代Web应用的完全指南》这篇文章为大家深入介绍了Reflex框架的设计理念,技术特性,项目结构,核心API,实际开发流程以及与其他框架的对比和部署建议,感兴趣的小伙... 目录什么是 ReFlex?为什么选择 Reflex?安装与环境配置构建你的第一个应用核心概念解析组件