web报表控件FineReport中如何设置数据签名验证
1、使用方法通过数字签名的方式来验证发送的报表请求,需要带有与FR约定的数字签名方式签名之后的信息,FR验证签名信息合法才允许访问报表,否则返回没有权限。注:本方案使用 MD5+RSA数字签名方式。

5、用户系统发送报表请求加入数字签名信息利用fr-pfh-java-7.0.jar提供的接口,对需要访问的报表路径、报表浏览形式(op)、当前用户名与当前系统时间进行数字签名,得到签名信息,并将签名信息加入请求中转发给报表工程,代码如下:<%@page contentType="text/html;charset=gbk" import="com.fr.pf.java.*" pageEncoding="gbk"%><%String reportPath = request.getParameter("report"); // 获得需要访问的报表路径,即我方reportlet参数String username = (String)request.getSession().getAttribute("username"); // 获取当前用户名String op = "page"; // 默认分页预览时,null即可long curtime = System.currentTimeMillis(); // 获取当前时间String signInfo = FRPrivilegeFilterHelper.sign(reportPath, op, username, curtime); // 将上述获得的四个要素传入,获得相关的数字签名信息String path = "http://localhost:8075/WebReport/ReportServer?reportlet=" + reportPath + "&op=" + op + "&" + FRPrivilegeFilterHelper.FR_DIGITALSIGNATURE_CURRENT_TIME + "=" + curtime + "&" + FRPrivilegeFilterHelper.FR_DIGITALSIGNATURE_INFO + "=" + signInfo; // 模拟拼接url,其实就是原有正常请求之后添加上签名的当前时间,和签名信息%><html><head> <title>Privilege Demo</title></head><body bgcolor="#FFFFFF" style="padding: 0pt; border: 0pt none; margin: 0pt; overflow: hidden;"> <iframe id="frame" src="<%=path%>" name="frame" width="100%" height="100%"/></body></html>报表工程得到报表请求后进行验证,对reportlet参数值、op参数值、报表系统中当前用户名、发送来的系统时间进行数字签名验证是否正确。且若用户系统发送来的签名时系统时间,与当前时间差超过90秒,将视为超时。如果都验证通过,则可以访问报表,否则提示没有权限查看。
6、重启服务器重启用户系统服务器及报表服务器(注意:必须先启动用户系统再启动报表系统),设置即可生效,效果如上图。