目录

单点登录功能调用说明

单点登录涉及用户登录和用户注销操作。

登录实际上又可细分为涉及用户验证和记录身份两项工作。验证的作用是检验输入的用户名和密码是否正确(也可以同时基于其他方式验证),其结果是合法则登录并获取用户身份,或者判断登录不合法。记录身份则是在合法登录后保持住当前的用户身份,供后续功能使用(一般是将用户身份记录在session中)。

在集成调用和跨系统调用两种情况下,使用用户身份的区别是:在集成调用时,登录过程完成后,用户信息即被保存在session中,并被整个应用系统共享。而在跨系统调用时,由于客户的应用系统和本产品系统都独立部署,是两个独立的应用,因此如果在客户的应用系统中完成登录后,用户信息只会保存在客户应用系统的session中,而无法在本产品系统中保持,因此在每次从客户应用系统中调用本产品功能时都需要传递用户身份信息。

基于上面情况,集成调用入口提供的单点登录验证方法,可直接完成验证和记录身份两个工作。而跨系统调用入口提供的单点登录验证方法,仅用于产品系统中的用户名密码校验返回校验结果,记录身份需要在后续的调用中传递用户身份信息。

同时集成调用入口还提供传递用户名直接登录的方法,无须进行校验操作。而跨系统调用入口则不提供此种方法,因为跨系统调用传递的用户信息无法在本产品系统中保存。

对于用户注销,由于跨系统调用方式下,用户在应用系统的注销操作只能清除应用系统本身的session,产品系统的session会随产品调用页面关闭而被清空,无需进行注销操作。故本产品仅对集成调用方式提供了用户注销接口。

下面就分别介绍集成调用和跨系统调用时的单点登录使用方法。

集成调用

适用场景:集成产品全部或部分模块,在集成的应用系统内通过单点登录接口进行产品中用户的登录注销。

一、后台方法

1、验证用户名、密码,执行登录操作

说明:通过login方法中传递用户名、密码后,进行用户名、密码验证,验证通过会直接往session里放用户相关信息。调用后从loginResult中读取登录操作结果,可根据返回结果进行后续操作。

调用方法:JSONObject loginResult = new ModuleEntry(request, response).login(username, password);

返回结果:JSON对象 {status:success} / {status:fail, msg: 用户名密码错误}

2、不验证,传递用户名,执行登录操作

说明:通过login方法中传递用户名,直接往session中放用户相关信息。调用后从loginResult中读取登录操作结果,可根据返回结果进行后续操作。

调用方法:JSONObject loginResult = new ModuleEntry(request, response).login2(username);

返回结果:JSON对象{status:success} / {status:fail, msg: 设置会话信息时发生内部错误}

3、注销用户

说明:通过logout方法中直接清除session中用户信息。调用后从logoutResult中读取注销操作结果,可根据返回结果进行后续操作。

调用方法:JSONObject logoutResult = new ModuleEntry(request, response).logout();

返回结果:JSON对象{status:success} / {status:fail, msg: 注销用户时当前没有用户}

二、前台方法

调用前需要引入相关js:mis2\security\js\ModuleEntry.js

1、验证用户名、密码,并记录身份信息

说明:通过login方法中传递用户名、密码后,进行用户名密码验证,验证通过会直接往session里放用户相关信息。调用后从loginResult中读取登录操作结果,可根据返回结果进行后续操作。该接口的实现原理是用ajax同步方式发送请求到统一入口,进行登录验证,并返回后台的输出信息。

调用方法:var loginResult= new ModuleEntry().login(username, password);

返回结果:{status:success} / {status:fail, msg: 用户名密码错误}

2、注销用户

说明:通过logout方法中直接清除session中用户信息。调用后从loginResult中读取注销操作结果,可根据返回结果进行后续操作。

调用方法:var logoutResult=new ModuleEntry(request, response).logout();

返回结果:{status:success} / {status:fail, msg: 注销用户时当前没有用户}

补充说明:本产品不提供集成调用方式下,【不验证、传递用户名、执行登录操作】和【调用功能同时传递用户登录】两种前台方法,这是因为前台方式调用会存在传递参数被篡改的风险,如果传递的用户名被非法修改,该用户即可直接登录,这样会存在严重的安全漏洞。

跨系统调用(部署安全模块)

适用场景:单独部署本产品,客户的应用系统中集成本产品提供的安全模块,在客户系统调用单点登录接口进行产品中用户校验。

应用举例:在客户的应用系统中需要进行产品系统用户密码验证时调用接口,传递用户名密码进行验证。根据返回结果决定下一步操作。验证通过时,客户系统负责将用户信息保存到客户系统的session中,并在进行下次请求调用时带上参数username=xxx,产品系统将自动用此用户登录,并保存用户信息至产品系统的session中。验证不通过时,不保存session,给出提示信息。

下面介绍跨系统调用校验用户名密码方法:

一、验证用户名、密码,返回验证结果

1、后台方法

功能说明:调用check方法传递用户名密码,发送请求到产品系统进行用户名、密码验证,并将验证结果返回。该方法只进行验证,不在产品系统生成session,由客户系统决定根据验证结果进行何种处理。

调用方法:JSONObject loginResult =new GezEntry (request, response).check(username, password);

返回值:JSONObject  {status:success} / {status:fail, msg: 用户名密码错误}

2、前台方法

功能说明:调用check方法传递用户名密码,发送请求到产品系统进行用户名、密码验证,验证后在回调函数中获取返回结果,并做下一步处理。该方法只进行验证,不在产品系统生成session,由客户系统决定根据验证结果进行何种处理。

调用方法:new GezEntry().check(name,pwd,'<%=url %>','checkCallBack');

参数说明:

name,用户名

pwd, 密码

url,产品url,如:http://localhost:8800/reportmis,可通过ConfigUtils.getUrl()获得
checkCallBackjsonp,回调函数方法名,需要在回调函数中获取返回值,进行下一步处理判断。注意返回值仅能在回调函数中获取

返回值:校验通过:{"status":"success","msg":"校验成功!!!"}

        校验失败:{"status":"fail","msg":"校验失败!"}

调用举例:

//调用前需要引入相关js:mis2/customer/js/GezEntry.js
new GezEntry().check(name,pwd,'<%=url %>','checkCallBack');
//回调方法
//check方法的回调函数
function checkCallBack(data){
         if("success"==data.status){
                   confirm(data.msg);
         }else{
                   confirm(data.msg);
         }
}

关于跨系统调用时的用户身份说明:

在跨系统调用时,每一次跨系统的访问(从A系统向B系统的调用),都是一个新的session,原有的用户信息并不能保存在session中。因此需要每次调用时传递身份信息到产品系统中。在跨系统调用安全模块中,可以自动携带此身份信息。如果使用跨系统直接调用的方式,则需要调用者自行拼接安全信息。

下面介绍跨系统调用传递用户身份信息的方法:

二、调用功能同时传递用户登录

说明:在调用入口中增加参数username,即可在该用户登录产品系统的同时返回调用结果。

调用方法:传递参数增加username,需要注意username必须为产品系统中确实存在的用户。

调用示例:

Map<String, String> paramMap = new HashMap<String, String>();
paramMap.put("username", "zhangsan");
//其他参数
……
//SR是模式ID,可替换为其他模块的调用模式ID
new GezEntry("SR", paramMap, request, response).entry();

返回结果:以传递的用户身份登录产品系统并返回该用户访问模块页面的结果。

注意:未提供集成调用时【调用功能同时传递用户登录】的方法。如果在集成调用时需要改变当前用户并调用功能,请先试用集成调用单点登录接口方法进行用户登录再进行功能调用。
跨系统调用(不部署安全模块)

适用场景:单独部署本产品,客户的应用系统中不集成产品提供的安全模块,在客户应用系统采用直接url调用的方式,在调用功能同时进行用户登录,并以该用户身份返回访问结果。

使用说明:

仅需在调用时增加username参数即可以该用户登录产品,并返回调用结果。

在调用原有url中添加username即可实现效果:

如:http://ProductIP:ProductPort/reportmis/gezEntry.url?patternID=SR&resID= 10052&username=zhangsa

注意:对于不部署安全模块跨系统访问的应用方式,不提供验证登录,注销的接口。