电子表格FineReport教程:[10]模板权限控制

2025-05-10 02:25:45

访问当前系统,肯定要告诉系统该用户拥有什么样的权限,可以看到什么样的内容,对于FR来说,也拥有这方面的功能。用户没有购买FR数据决策系统功能,想将FR的报表集成到自己已有系统中骀旬沃啭时,用户登录系统,查看FineReport的报表,可以通过以下四种方式来控制该用户所能查看的报表,用户可根据实际情况来选择使用哪一种权限控制模式。1、不做身份验证2、仅验证用户名密码3、自定义用户角色权限4、使用数字签名验证,下面就通过电子表格FineReport来简单介绍一下。

工具/原料

电子表格FineReport7.1.1

大小:148.2M 适用平台:windows/linux

不做身份验证

1、描述不做身份验证即无权限控制,任何访问都能通过,即不登陆报表系统也能查看模板,为权限控制的默认选项,表示将FR模板嵌入到用户自己系统中时,直接点击节点预览就可以查看模板,无需权限控制。注:不登陆报表系统可以访问任何模板意味着通过URL直接预览模板就可以访问所有模板。

2、示例登陆报表管理平台,在管理系统>权限管理>设置中,选择不做身份验证,如下图:权限控制方式选择

电子表格FineReport教程:[10]模板权限控制

3、效果查看直接在浏览器地址栏里面打开模板查看的路径,直接访问模板,如下图:

电子表格FineReport教程:[10]模板权限控制

仅验证用户名密码

1、描述仅验证用户是否登录成功,即成功登录的用户可以访问所有模板,而没有成功登录的用户禁止访问所有模板。注:此处所说的登录成功用户是指登录报表系统,即验证报表系统中配置的用户名密码,不是用户自己系统中的用户名密码,与用户身份验证结合使用,即用户身份验证方式选择什么,那么用户名密码就怎么认证。

2、适用情况如果用户的系统比较小,人员也少,对权限分配这方面没有什么需求,只是为了避免不登陆就可以查看报表的情况出现,那么直接使用仅验证用户名密码这种权限配置方式即可。

3、权限控制方式选择在模板权限控制中选择仅验证用户名密码:点击确定。

电子表格FineReport教程:[10]模板权限控制

4、效果查看直接预览直接在浏览器地址栏里面打开模板查看的路径,直接访问模板,如下图:此时,需要将在用户系统中登录报表系统验证用户名密码才能查看模板。

电子表格FineReport教程:[10]模板权限控制

5、验证完成之后重新刷新模板页面,可以看到该模板可以访问了:

电子表格FineReport教程:[10]模板权限控制

角色权限控制

1、描述角色权限控制即管理员可以通过用户的角色来给不同角色配置不同的模板访问权限,如“一线技术支持”只能访问B模板,当角色为一线技术支持的员工登陆之后,只能查看B模板,如果访问A模板就会提示没有权限。注:如果选择角色权限控制,那么查看模板时,首先必须先登录,然后再根据登录用户的角色判断权限。

2、适用情况角色权限控制适用于那些相对来说系统比较大,人员比较多,模板不是很多,并且对模板访问权限有需求的情况。注:角色权限控制不仅仅用于报表集成时的权限设置,还用于远程设计的权限分配。

3、示例首先在用户管理中为系统导入或添加用户,并设置用户身份验证方式,这里使用服务器数据集用户信息表,身份验证方式使用默认方式。

4、权限控制方式选择用管理员帐号登陆系统,在模板权限控制中选择角色权限控制,此时下方会出现一个数据连接控制的选项,该选项主要应用于远程设计,默认为关闭,这里使用默认设置,如下图:

电子表格FineReport教程:[10]模板权限控制

5、权限分配点击确定,在权限管理界面就可以根据角色分配权限,平台会自动读取用户管理中添加或导入的角色展示出来,也可以手动添加角色,如下图:

电子表格FineReport教程:[10]模板权限控制

6、如上图,可以为角色分配模板的查看、填报和设计的权限。其中设计在远程设计总使用。注:模板的查看与填报权限是指控制该模板是否能普通预览和填报预览。我们添加1个角色数据架构师,用户为Anna,祈硗樘缎其添加方式可查看根据角色分配权限,给该角色分配GettingStarted的模板查看和填报的权限,如下图:

电子表格FineReport教程:[10]模板权限控制

7、效果查看数据架构师角色用户登录使用数据架构师这个角色用户Anna账号登陆,通过reportlet接口访问GettingStarted.cpt模板,如下图:

电子表格FineReport教程:[10]模板权限控制

8、其他用户账号登录使用非数据架构师角色用户账号登录系统,比如说Jack登录系统通过reportlet接口访问GettingStarted.cpt模板,则会提示没有权限,如下图:

电子表格FineReport教程:[10]模板权限控制

数据签名验证

1、数亨蚂擤缚字签名是以电子的形式存在于数据信息中,或者是作为附件,或者是逻辑上与之有联系的数据,可用于辨别使用人的身份,保跷高瘴玷证数据的安全性。目前的数字签名是建立在公共密钥体制基础上,它是公用密钥加密技术的另一类应用。它的主要方式是:报文的发送方从报文文本中生成一个128位的散列值(或报文摘要)。发送方用自己的私人密钥对这个散列值进行加密来形成发送方的数字签名。这个数字签名将作为报文的附件和报文一起发送给报文的接收方。报文的接收方首先从接收到的原始报文中计算出128位的散列值(或报文摘要),再用发送方的公用密钥来对报文附加的数字签名进行解密。如果两个散列值相同、那么接收方就能确认该数字签名是发送方的。通过数字签名能够实现对原始报文的鉴别。

2、适用情况前面3个章节的权限控制方式是针对那些比较简单的系统而言的,那么对那些很复杂的系统,使用前面3中权限配置方式就行不通了,这个时候就可以用数字签名的方式进行权限配置。

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

电子表格FineReport教程:[10]模板权限控制

4、jar包准备在使用FR的数字签名时,必须下载fr-pfh-java-7.0.jar包,选择权限集成-JAV帆歌达缒A资源>fr-pfh-java-7.0.jar,拷贝至报表工程WebReport\WEB-INF\lib及用户系统(假设用户系统工程名为PFDemo,端口号为8080)PFDemo\WEB-INF\lib下。(注意:报表工程与用户系统下都要有);将报表工程WebReport\WEB-INF\lib下的fr-third-7.1.jar包拷贝至用户系统PFDemo\WEB-INF\lib下。

5、用户系统中添加一个web接口给报表工程提供公钥这个接口是一个地址,比如在用户系统中画陲奴颁注册一个servlet,访问这个servlet来获得公钥,http://localhost:8080/PFDemo/DemoServer?cmd=getkey:DemoServer这个servlet所对应的类为demo.DemoServlet,代码如下:package demo;import java.io.IOException;import java.io.PrintWriter;import java.math.BigInteger;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.fr.pf.java.FRPrivilegeFilterHelper;public class DemoServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { doPost(req, res); } /** * 这里只是示例,就简单处理,不做分层了 */ public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { String cmd = req.getParameter("cmd"); if ("getkey".equals(cmd)) { dealWithKey(req, res); } } private void dealWithKey(HttpServletRequest req, HttpServletResponse res) throws IOException { PrintWriter writer = new PrintWriter(res.getOutputStream()); try { // 获得公钥的两个参数,传回 BigInteger modulus = FRPrivilegeFilterHelper.getPublicKeyModulus(); BigInteger exponent = FRPrivilegeFilterHelper.getPublicKeyExponent(); writer.write(modulus.toString() + "&" + exponent.toString()); } catch (Exception e) { e.printStackTrace(); writer.write("error"); } writer.flush(); writer.close(); }}编译后的类保存在PFDemo\WEB-INF\classes\demo\DemoServlet.class。

6、报表工程中获取用户系统的公钥登陆管理平台,选择管理系统>权限配置>设置,模板权限控制方式选择数字签名认证,点击确定:

电子表格FineReport教程:[10]模板权限控制

7、用户系统发送报表请求加入数字签名信息利用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秒,将视为超时。如果都验证通过,则可以访问报表,否则提示没有权限查看。

8、重启服务器重启用户系统服务器及报表服务器(注意:必须先启动用户系统再启动报表系统),设置即可生效,效果如上图。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢