ITPub博客

首页 > 大数据 > 可视化 > 报表访问控制Filter的演示例子

报表访问控制Filter的演示例子

可视化 作者:jyjun 时间:2020-09-30 11:22:28 0 删除 编辑

皕杰报表集成的服务器的时候分为只集成报表环境和皕杰平台两个方式,如果只集成报表环境的时候怎么给这个报表环境添加上登录权限验证。

1.  写filter 类,示例:

package bios.report.dev.examples.filters;

/**

 * 报表访问控制 Filter 的演示例子

 * @author Bijetsoft.com

 */

public class ReportAccessFilter implements Filter {

/**

 * session 中的用户 ID 属性名

 */

private static final String USER_ID = "USER_ID";

/**

 * 功能点 ID ,查看报表

 */

private static final int FUNCTION_VIEW = 1;

/**

 * 功能点 ID ,导出 Excel

 */

private static final int FUNCTION_XLS = 2;

/**

 * 功能点 ID ,导出 pdf

 */

private static final int FUNCTION_PDF = 3;

/**

 * 功能点 ID ,导出 word

 */

private static final int FUNCTION_DOC = 4;

/**

 * 功能点 ID ,打印报表

 */

private static final int FUNCTION_PRINT = 5;

/**

 * 请求编码

 */

private static String encode = "GBK";

    public ReportAccessFilter() {

    }

public void destroy() {

}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

HttpServletRequest req =(HttpServletRequest)request;

req.setCharacterEncoding(encode);

String errorMsg = null;

String userId = (String)req.getSession().getAttribute(USER_ID); // 获取用户 ID ,判断是否为登录用户

if(userId == null)

errorMsg = " 您无权访问报表系统,请先登录 !";

else {

String rpt = req.getParameter("rpt");

if (isReportExist(rpt)) { // 判断报表参数是否合法,指定的报表是否存在

// 判断用户是否有权对报表进行访问、导出、打印等操作

String output = req.getParameter("emitter");

if((output == null || "tohtml".equalsIgnoreCase(output)) && !hasRight(userId, rpt, FUNCTION_VIEW))

errorMsg = " 您无权查看该报表 !";

else if("toxls".equalsIgnoreCase(output) && !hasRight(userId, rpt, FUNCTION_XLS))

errorMsg = " 您无权进行导出 Excel 操作 !";

else if("topdf".equalsIgnoreCase(output) && !hasRight(userId, rpt, FUNCTION_PDF))

errorMsg = " 您无权进行导出 PDF 操作 !";

else if("todoc".equalsIgnoreCase(output) && !hasRight(userId, rpt, FUNCTION_DOC))

errorMsg = " 您无权进行导出 Word 操作 !";

else if("print".equalsIgnoreCase(output) && !hasRight(userId, rpt, FUNCTION_PRINT))

errorMsg = " 您无权进行打印操作 !";

} else {

errorMsg = " 指定报表不存在 !";

}

}

// 无权访问或权限验证出错时,输入提示信息

if(errorMsg != null){

response.setContentType("text/html;charset=" + encode);

StringBuffer html = new StringBuffer();

html.append(" 〈 table width='250' valign='center'> 〈 tr> 〈 td width='100%'>");

html.append(" 〈 b>").append(errorMsg).append(" 〈 /b>");

html.append(" 〈 /td> 〈 /tr> 〈 /table>");

response.getWriter().write(html.toString());

return;

}

chain.doFilter(request, response);

}

/**

 * 判断传入的 rpt 参数是否合法,指定的报表是否存在

 * @param rpt 请求的 rpt 参数

 * @return

 */

protected boolean isReportExist(String rpt){

//TODO 可自定义实现该方法

return true;

}

/**

 * 判断用户是否有权对某张报表进行指定操作

 * @param userId 用户 ID

 * @param rpt 报表

 * @param function 功能点

 * @return

 */

protected boolean hasRight(String userId, String rpt, int function) {

//TODO 需根据系统权限分配,自定义实现该方法

return true;

}

public void init(FilterConfig fConfig) throws ServletException {

//TODO

}

}

 

2.  将这个fiter 类打成 jar 包复制到皕杰报表 web 环境 /web-inf/lib 下

3.  打开皕杰报表web 环境 /web-inf/ 下的 web.xml ,添加 fiter

〈 filter>

〈 filter-name>reportFilter 〈 /filter-name>

〈 filter-class>bios.report.dev.examples.filters.ReportAccessFilter 〈 /filter-class>

〈 /filter>

〈 filter-mapping>

〈 filter-name>reportFilter 〈 /filter-name>

〈 url-pattern>/ReportEmitter 〈 /url-pattern>

〈 /filter-mapping>

 

4.  一个简单登录验证fiter 就创建好了。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69984822/viewspace-2725234/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2020-09-30

  • 博文量
    16
  • 访问量
    9301