单点登录-方式2
应用场景
用户的应用系统与本产品分别单独部署,用户的应用系统中集成本产品提供的安全模块,在本产品中管理用户、机构等信息。此时在用户的应用系统中可以只是提供登录窗口,单点登录时实际通过本产品系统进行登录用户的身份验证,可以根据返回的验证结果在用户的应用系统中决定下一步的操作。
验证用户名、密码,返回验证结果
通过安全调用模块的GezEntry().check()方法传递用户名、密码,发送请求到产品系统进行用户名、密码验证,验证后可获取验证结果,并做下一步处理。通过该方法完成身份验证后不会在产品系统生成session,而是自动在用户应用系统安全调用模块中记录验证通过的用户名,下次同一个用户再进行跨系统调用时,会自动在请求中添加用户名。
调用方法:JSONObject loginResult = new GezEntry (request, response).check(username, password);
参数说明:
- username 用户名
- password 密码
返回值:JSONObject {status:success} / {status:fail, msg: 用户名密码错误}
注意:check方法必须在后台调用。
验证后进行跨系统调用
通过GezEntry().check()方法完成身份验证后进行跨系统功能调用,安全调用模块将自动在请求中添加用户名,不需要手工在参数map中添加。
例如下面的示例代码,进行单点登录身份验证后就调用报表展现模块打开一张报表,若验证不通过给予提示:
<script type="text/javascript" language="javascript">
// 单点登录方式2
function loginSystem2(){
//获取用户输入的用户名、密码
var username = $("#username").val();
var password = $("#password").val();
var params = {"username":username,"password":password};
//发送用户验证请求,由loginSystem.jsp在后台调用安全模块的check方法进行身份验证
var ajax = new AjaxUtil();
ajax.sendAjax("loginSystem.jsp",params,successFunc,errorFunc);
}
//用户验证通过后展现报表
function successFunc(data){
// 访问报表所需参数,resID:资源ID,username:用户名
// 但通过GezEntry().check()方法通过身份验证后,username无需自行设置,将由安全调用模块自动添加
// 因此,这里只设置参数resID
var params = {resID : "11946"};
<%
Map<String, String> paramMap = new HashMap<String, String>();
// 生成安全校验信息
paramMap.put("resID","11946");
String secInfo = SecInfoUtils.generate(request, paramMap);
%>
// 调用报表展现功能,调用时各参数含义依次为:模块ID、所需参数、安全校验信息、展示位置,其中SR是报表展现模块的模式ID
// 展示位置:_blank--新页面打开、_self--本页面打开、iframeName--在指定的iframe中打开
new GezEntry("SR", params, "<%=secInfo %>", "_blank").enter();
}
//用户验证失败进行提示
function errorFunc(data){
alert(data.msg);
}
</script>
loginSystem.jsp中的代码如下: