前台调用方法
在部署了安全模块的客户应用系统中,同样可通过前台方式使用安全模块调用入口,其调用方式与集成调用入口中前台调用方法类似,了解前文【集成调用入口 -> 前台调用方法】的读者可略过此节内容。
安全模块调用入口的标准调用方式为上文中介绍的后台调用方式,但客户也可能需要通过前台的方式使用安全模块调用入口进行产品功能的跨系统调用。前台调用方式存在一定的安全隐患,如对参数的篡改等,故建议用户通过前台方法调用时,自行评估和解决访问安全性问题。
安全模块提供了一种实现了安全机制的前台调用方法和对应示例可供参考。
前台调用时存在参数被篡改的风险,本方法在前台调用时可使用后台生成的安全校验信息,调用时参与校验的参数值要与实际传递的参数值要一致,即前后台传递的参数是一致。这样如果用户修改了后台参与校验的参数就不能通过安全校验。此方法有效规避了前台调用的安全隐患。
前台调用方式的调用方法
Step1
引入提供前台调用方法的js:
mis2/customer/js/GezEntry.js;
Step2
后台生成安全校验信息:
<%@ page import="com.customer.security.SecInfoUtils "%>
<%
// 参数
Map<String, String> paramMap = new HashMap<String, String>();
paramMap.put("param1", "value1");
String secInfo = Security.generate(request, paramMap);
%>
Step3
通过js中提供的前台方法调用产品功能:
new ModuleEntry(parttenID, params, secInfo, target).enter();
方法参数说明:
- patternID 所需调用功能的模式ID,在产品中的配置文件【pattern.xml】有相应配置
- params 参数串,格式为param1=value1&...¶mN=valueN,或者JSON对象格式
- secInfo 安全校验信息,后台生成
- target 打开目标(新窗口、当前窗口、指定窗口等)
前台调用示例
下面是一个通过前台方法,在新窗口中调用产品的报表展现模块【通用报表展现页面SR】展现一张报表文件名为【test.raq】的报表的示例:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="com.customer.security.SecInfoUtils"%>
<%
// 参数
Map<String, String> paramMap = new HashMap<String, String>();
String file= "test.raq";
paramMap.put("file", file);
// file参数参与校验
// 生成安全校验信息
String secInfo = Security.generate(request, paramMap);
%>
<script type="text/javascript" src="<%=request.getContextPath() %>/mis2/customer/js/GezEntry.js"></script>
<script type="text/javascript">
var params = {file: "<%=file%>", reportAlign : "center"};
// secInfo包含了file参数,而不包含reportAlign
new GezEntry("SR", params, "<%=secInfo %>", "_blank").enter();
</script>
注:并不是所有参数都需要加入到安全校验,需要看各个功能调用入口的具体情况,参与校验的参数值要与实际传递的参数值要一致。如果参数(如上例中的file)是从后台Java得到的,赋值给前台JS,前台JS用此参数发请求,需保证前后台的参数是一致的,这种参数可以加入校验。如果没有从后台传递的参数,secInfo可以传空值。