《NCV63单点登录集成方案》由会员分享,可在线阅读,更多相关《NCV63单点登录集成方案(8页珍藏版)》请在金锄头文库上搜索。
1、第三方服务器NC63 单点登录方案说明文档1.简述NC60 的单点登录方案和 NC5x 的单点登录方案比较相近,但是其注册和登录的 url 格式 有所变化,并且增加了一些功能,例如可以定义在注册用户信息的身份认证,可以由 NC 系统 生成 ssoKey 等等注册用户信息的URL基本格式为:http:/host:port/ service/ssoRegServlet? ssoKey =key&userCode=usercode单点登录NC系统的URL基本格式为: http:/host:port/login.jsp? ssoKey =key 单点登录配置文件路径为:$NCHOMEierpsfsso
2、Config.xml1.1. 单点登录方案详述想要单点登录到NC,首先需要在服务器端向NC服务器注册将要登录的用户的信息以 及其他一些需要的信息,这些信息将被保存在NC服务器上,通过ssoKey进行关联映射。在完成注册信息后,客户端在登录时需要提供ssoKey,通过该值获得登录用户的相关信 息,进入NC系统。如下图所示:第二步:向NC服务器注册用户登录信息http:/host:port/ service/ssoRegServIet? ssoKey=ke y&userCode二usercodeNC系统服务器第、一步.提交2. 注册用户登录信息NC 系统提供了一个 Servlet 来注册用户登录信
3、息。访问该 servlet 的 URL 格式基本为: http:/host:port/service/ssoRegServlet,其后面可以跟随多个参数,如下所示:1. userCode: 指定用户编码,该参数必须提供,不能省略。2. ssoKey: 指定映射登录信息的键值,并在登录时需要提供该值。该值要求唯一, 如果在注册时没有提供该值, NC 系统会自动生成一个 ssoKey 的值,并在返回的 Servlet 流中输出该值3. busiCenter :指定用户所属的账套编码,该值可以忽略。如果忽略该值,并且在多 个账套中都存在userCode用户,那么会让终端用户选择账套。4. group
4、Code:指定登录的集团编码,该值可以忽略。5. langCode:指定登录的语种,该值可以忽略,默认为中文示例:http:/host:port/ service/ssoRegServlet? ssoKey =123459483230949&userCode=zhangsan 这个URL表示将以用户zhangsan的身份登录,注册信息的键值为123459483230949。21登录NC系统在完成了用户登录信息的注册后,客户端就可以以注册的ssoKey值来登录NC系统了, 登录NC系统的ssoKey值以URL参数的形式提供,如下所示:http:/host:port/login.jsp? ssoK
5、ey =keyvalue。对于前面的示例http:/host:port/ service/ssoRegServlet? ssoKey =123459483230949&userCode=zhangsan 登录时的URL为http:/host:port/login.jsp? ssoKey =12345948323094922根据功能节点打开NC界面例如打开nc系统的人员页面:ssoKey例如还是上面的令牌,nodeid=10140PSN是人员 的功能注册编码http:/127.0.0.1/login.jsp?ssoKey=123459483230949&clienttype=porta l&ui
6、loader=nc.uap .lf w.ap plet.PortalUILoader&n odeid=10140PSN23自定义uiLoader打开NC任意界面在上一章节中是根据功能节点打开列表界面,那么如何打开单据卡片界面呢,或者如何 打开流程卡片界面等等。所以需要自己开发一个 uiLoader 类进行处理,如下图所示,如何 集成打开一个人员卡片界面。开发步骤如下:第1步:定义一个CustomPortalUILoader类,它继承了 SSOLoader类,源码如下:package nc.demo.bx.uiloader;import java.awt.Component;import jav
7、a.awt.Dimension;import mon.NCLocator;import nc.desktop.ui.WorkbenchEnvironment;import nc.funcnode.ui.FuncletInitData;import nc.funcnode.ui.FuncletWindowLauncher;import nc.itf.uap.bbd.func.IFuncRegisterQueryService;import nc.login.sso.ui.SSOLoader;import nc.sfbase.client.ClientToolKit;import nc.ui.bd
8、.pub.BDFuncletInitData;import nc.ui.pub.msg.PfLinkData;import nc.ui.uap.sf.SFClientUtil;import nc.vo.bd.psn.PsndocVO;import nc.vo.pub.BusinessException;import nc.vo.sm.funcreg.FuncRegisterVO;public class CustomPortalUILoader extends SSOLoader Overridepublic void appletInited() /父窗体Component parent =
9、WorkbenchEnvironment.getInstance().getWorkbench();String param = ClientToolKit.getAppletParam(nodeId);St ring sys temcode=local ; /默认系统编码/功能注册节点String funCode=param;/人员pkString pk_psndoc = ClientToolKit.getAppletParam(pk_psndoc); if(param.contains(:)funCode=param.split(:)0;systemcode=param.split(:)1
10、;IFuncRegisterQueryService service =NCLocator.getInstance().lookup(IFuncRegisterQueryService.class);FuncRegisterVO FrvOnull;try FrvO = service.queryFunctionByCode(funCode); /功能节点编号 catch (BusinessException e) /打开界面的三种方式如下:/*第一种:打开流程单据卡片界面*/PfLinkData pflink = new PfLinkData();/pflink.se tBillID(100l
11、ZZl000000000000Q); /本 单据 ID/pflink.se tBillType(SALE); /本单据类型/pflink.se tSourceBillType(SALE); /上游单据类型/pflink.se tPkOrg(OOOlZZlOOOOOOOOOO74A); /公司/int height = ClientToolKit.getUserHeight()-40;/int width = ClientToolKit.getUserWidth()-40;/FuncletWindowLauncher.openFuncNodeForceModalDialog(null,frvO,
12、new FuncletInitData(1, pflink),null, true, newDimension(width,height),null);/*第二种:打开档案卡片界面 *PsndocVO psndocvo =new PsndocVO();psndocvo.setPrimaryKey(pk_psndoc);BDFuncletInitData bdlinkdata = new BDFuncletInitData(null, 3, psndocvo);int height = ClientToolKit.getUserHeight()-40;int width = ClientTool
13、Kit.getUserWidth()-40;/模态窗体弹出对话打开/FuncletWindowLauncher.openFuncNodeForceModalDialog(null,FrvO,new FuncletInitData(3, bdlinkdata),null, true, new Dimension(width,height),null);/非模态窗体弹出对话框框架打开/FuncletWindowLauncher.openFuncNodeFrame(parent, FrvO, new FuncletInitData(3, bdlinkdata), null,false);/非模态窗体
14、在原来窗体页签打开FuncletWindowLauncher.openFuncNodelnTabbedPane(parent, FrvO, new FuncletInitData(3, bdlinkdata), null,false);/*第三种:根据功能注册节点打开列表界面 */SFClientutil.open(parent, funCode);String script = newStringif(opener)opener.ncNodeAppletMap.put(+systemcode+,findN CApplet();ClientToolKit.callJavaScript(eval, script);第2步:部署到nchome中对用模块的client中,我的测试模块是Ifwdemo,如下图:第 3 步:访问测试,访问两个步骤1. 首先令牌注册,在IE浏览器中,输入下面url。注意:帐套编码busiCente最好是填写上, 否则在登录的时候要求选择帐套http:/127.0.0.1/servic