本帖最后由 加菲喵 于 2015-9-10 16:55 编辑
1.问题描述 在实际的应用中,用户在使用我们的报表系统时,越来越多的需要对URL进行加密来避免URL参数注入这种对系统安全造成影响的问题,FineReport在目前版本里并没有提供详细的URL加密方法,故现在我们需要自定义个一个filter来实现具体的加密操作,选择加密的方法必须是可逆,可靠的,因此我们下面将讲解下DES加密报表URL的方法。 2. DES介绍 DES算法为密码体制中的对称密码体制,又被成为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。其密钥长度为56位,明文按64位进行分组,将分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。DES加密算法特点:分组比较短、密钥太短、密码生命周期短、运算速度较慢。DES工作的基本原理是,其入口参数有三个:key、data、mode。 key为加密解密使用的密钥,data为加密解密的数据,mode为其工作模式。当模式为加密模式时,明文按照64位进行分组,形成明文组,key用于对数据加密,当模式为解密模式时,key用于对数据解密。实际运用中,密钥只用到了64位中的56位,这样才具有高的安全性。DES( DataEncryption Standard)算法,于1977年得到美国政府的正式许可,是一种用56位密钥来加密64位数据的方法。虽然56位密钥的DES算法已经风光不在,而且常有用Des加密的明文被破译的报道,但是了解一下昔日美国的标准加密算法总是有益的,而且目前DES算法得到了广泛的应用,在某些场合,仍然发挥着余热。 3. URL加密实际操作 1.在class->com->fr->web目录下放入DESFilter.class文件 2.web.xml添加filter标签 3.改过引用报表页面的JSP 样例代码如下:
<% @Page language="java"contentType="text/html;charset=gb2312"pageEncoding="gb2312"%> <%@page import="java.util.*"%> <%@page import="com.fr.web.DESFilter"%>
<%
DESFilter DES=new DESFilter(); ArrayListurl=DES.url("reportlet=34401.cpt&op=write"); Stringurl1=url.get(0).toString();//获取加密后的参数信息 Stringurl2=url.get(1).toString();//获取加密后的密钥 Stringurl_string="http://localhost:8080/WebReport/ReportServer?__rawDataString__="+url2+"&__appkey__="+url1; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0Transitional//EN"> <html> <head> <title></title> <title>Demo</title> </head> <iframesrc="<%=url_string%>" width = 100% height=100%></iframe> <p>页面其他部分</p> </body> <html> 注意:URL必须需要__rawdataString__和__appkey__ 参数 对应的是密钥和加密后的参数 4.演示效果 正常页面不会有影响
Index.jsp可以出报表 URL是加密的切不固定的 F5之 DESFilter接口代码已经写好,尽量不要2次书写,代码会在附件给出。
|