多语言展示
当前在线:1945今日阅读:19今日分享:20

数据分析报表FineReport中模板权限的控制示例

集成报表后,希望不同的用户登录,所能看到的报表是不同的,没有权限的用户查看报表时提示没有权限,下面就通过数据分析报表FineReport来进行介绍。
工具/原料
1

数据分析报表FineReport7.1.1

2

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

方法/步骤
1

前提准备报表工程:如直接使用内置Jetty服务器中的报表工程WebReport,端口为8075;用户系统:如用户工程(在PFDemo目录)发布于Tomcat服务器,端口为8080;PFDemo下有文件login.html(用户的登陆界面)、index.jsp(登陆后的主界面)、report.jsp(对报表请求进行签名,将签名信息加入请求中转发给报表工程)。注:下面有对应文件的完整代码。配置好报表端的身份验证>并与用户系统实现单点登录:如该例我们使用数据集验证,用户-密码服务器数据集定义如下:

2

登陆平台系统http://localhost:8075/WebReport/ReportServer?op=fr_platform,点击管理系统>用户管理>设置,认证方式使用默认的平台内置认证,配置用户同步数据集,如下图:

3

修改用户登录界面login.html,实现单点登录,代码如下:  

4

拷贝jar包下载fr-pfh-java-7.0.jar包,选择权限集成-JAVA资源>fr-pfh-java-7.0.jar,拷贝至报表工程WebReport\WEB-INF\lib及用户系统PFDemo\WEB-INF\lib下(注意:报表工程与用户系统下都要有);将报表工程WebReport\WEB-INF\lib下的fr-third-7.0.jar包拷贝至用户系统PFDemo\WEB-INF\lib下。

5

用户系统中添加一个web接口给报表工程提供公钥这个接口是一个地址,比如在用户系统中注册一个servlet,访问这个servlet来获得公钥,http://localhost:8080/PFDemo/DemoServer?cmd=getkey:在用户系统的PFDemo\WEB-INF\web.xml中添加一个servlet:   Demo WebApp      DemoServer    demo.DemoServlet    0        DemoServer    /DemoServer 

6

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。

7

报表工程中获取用户系统的公钥登陆管理平台,选择权限配置>详细权限配置;数字签名密钥地址为http://localhost:8080/PFDemo/DemoServer?cmd=getkey,点击提交:

8

用户系统发送报表请求加入数字签名信息如最上图中登陆后的主界面为index.jsp,代码如下:<%@page contentType='text/html;charset=gbk' pageEncoding='gbk'%><%String username = request.getParameter('username');String password = request.getParameter('password');// 下面是用户系统对登陆用户名和密码的验证,以下用最简单的代码做示例if ('A'.equals(username) && '123'.equals(password)) {    request.getSession().setAttribute('username', 'A');} else if ('B'.equals(username) && '123'.equals(password)) {    request.getSession().setAttribute('username', 'B');} else {request.getSession().setAttribute('username', '');}%>   Privilege Demo

                       
    Privilege Demo    Current user:    <%=username%>   
    <% if ('A'.equals(request.getSession().getAttribute('username'))) {    %>   
       
  •     Report1(A,B)   
  •    
  •     Report2(A)   
  •    
    <%    } else if ('B'.equals(request.getSession().getAttribute('username'))) {    %>   
       
  •     Report1(A,B)   
  •    
    <%    }    %>