润乾报表与用户的系统集成,一般有两种方案。一是集成到用户系统中。二是将润乾单独部署到一个应用下。
两种方案各有利弊:第一种方案对于安全性等方面可以统一管理,但是报表本身如果数据量大并发大造成的压力会直接影响用户自己的系统。第二种方案在报表服务器承受压力过大数据量过大的时候,不会影响到用户本身的系统,也就是说就算报表服务器压力饱和进入等待状态,用户的系统也可以正常的使用,众所周知润乾报表的调用一般直接通过url的方式进行调用,那么第二种方案中的url就无法被用户系统所控制,造成了一定的安全隐患。
下面就介绍几种解决此类问题的方案之中的一种:对url进行加解密
案例场景:
通过用户系统访问一张报表时,当然会带着一些用户信息或是其他参数传递过来。如果这时这个url的明文被其他人记住,比如url拼参数username=zhangsan,这时李四记住了这个url并且与自己访问该资源的url进行对比发现传入参数为用户姓名拼音,由于采用的是第二种方案,用户系统并不能控制,这样就可以肆无忌惮的去查看其他人的信息,导致信息的泄漏。
解决思路:
这时我们可以采取对url中的明文进行加解密的操作,通过用户系统传递参数之前进行加密,然后传递到报表服务器端,在jsp中或者报表中进行解密。(下文介绍是在报表中解密)
实现方法:
一、首先确定加解密规则,这里使用的是AES加解密方法,密钥为16位英文,由于是说明将密钥定义死在相应类中。
二、通过测试类将username=zhangsan加密为:
880CB3013AB0D0F3A91B1C36B323F6E40294D3BE6EEFAA38135690CA3DCC61A2模拟用户系统传递参数到报表服务器的url为:
三、编写AES加解密的自定义函数,接受参数时只用到解密函数,加密函数是在报表中超链接等位置再次使用时可以调用加密函数。
1、实现AES加解密的类
public class AES {
private static final String AES = "AES";
private static final String CRYPT_KEY = "aaaaaaaaaaaaaaaa";
/**
* 加密
*
* @param encryptStr
* @return
*/
public static