NCV63-portal单点登录集成方案

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

         单点登录配置文件路径为:

         ${NCHOME}\ierp\sf\ssoConfig.xml

 

1.1.  单点登录方案详述

         想要单点登录到NC,首先需要在服务器端向NC服务器注册将要登录的用户的信息以及其他一些需要的信息,这些信息将被保存在NC服务器上,通过ssoKey进行关联映射。

         在完成注册信息后,客户端在登录时需要提供ssoKey,通过该值获得登录用户的相关信息,进入NC系统。

         如下图所示:

2.  注册用户登录信息

NC系统提供了一个Servlet来注册用户登录信息。访问该servletURL格式基本为:

http://host:port/service/ssoRegServlet,其后面可以跟随多个参数,如下所示:

1.       userCode: 指定用户编码,该参数必须提供,不能省略。

2.       ssoKey指定映射登录信息的键值,并在登录时需要提供该值。该值要求唯一,如果在注册时没有提供该值,NC系统会自动生成一个ssoKey的值,并在返回的Servlet流中输出该值

3.      busiCenter:指定用户所属的账套编码,该值可以忽略。如果忽略该值,并且在多个账套中都存在userCode用户,那么会让终端用户选择账套。

4.      groupCode:指定登录的集团编码,该值可以忽略。

5.      langCode:指定登录的语种,该值可以忽略,默认为中文

 

示例:

http://host:port/ service/ssoRegServlet?ssoKey =123459483230949&userCode=zhangsan

这个URL表示将以用户zhangsan的身份登录,注册信息的键值为123459483230949

 

 

2.1.  登录NC系统

         在完成了用户登录信息的注册后,客户端就可以以注册的ssoKey值来登录NC系统了,登录NC系统的ssoKey值以URL参数的形式提供,如下所示:

http://host:port/login.jsp? ssoKey =keyvalue

 

对于前面的示例

http://host:port/ service/ssoRegServlet?ssoKey =123459483230949&userCode=zhangsan

登录时的URL

http://host:port/login.jsp? ssoKey =123459483230949

 

2.2.  根据功能节点打开NC界面

例如打开nc系统的人员页面:ssoKey例如还是上面的令牌,nodeid=10140PSN是人员的功能注册编码

 

http://127.0.0.1/login.jsp?ssoKey=123459483230949&clienttype=portal&uiloader=nc.uap.lfw.applet.PortalUILoader&nodeid=10140PSN

 

2.3.  自定义uiLoader打开NC任意界面

在上一章节中是根据功能节点打开列表界面,那么如何打开单据卡片界面呢,或者如何打开流程卡片界面等等。所以需要自己开发一个uiLoader类进行处理,如下图所示,如何集成打开一个人员卡片界面。

 

开发步骤如下:

1步:定义一个CustomPortalUILoader类,它继承了SSOLoader类,源码如下:

 

package nc.demo.bx.uiloader;

 

import java.awt.Component;

import java.awt.Dimension;

 

import nc.bs.framework.common.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.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;

 

publicclass CustomPortalUILoader extends SSOLoader {

 

    @Override

    publicvoid appletInited() {

       //父窗体

       Component parent = WorkbenchEnvironment.getInstance().getWorkbench();

       String param = ClientToolKit.getAppletParam("nodeId");

       String systemcode="local";//默认系统编码

       //功能注册节点

       String funCode=param;

       //人员pk

       String pk_psndoc = ClientToolKit.getAppletParam("pk_psndoc");

       if(param.contains(":")){

           funCode=param.split(":")[0];

           systemcode=param.split(":")[1];

       }

      

       IFuncRegisterQueryService service = NCLocator.getInstance().lookup(IFuncRegisterQueryService.class);

 

        FuncRegisterVO FrvO=null;

       try {

           FrvO = service.queryFunctionByCode(funCode);//功能节点编号

       } catch (BusinessException e) {

       }

 

//打开界面的三种方式如下:

      

//**********第一种:打开流程单据卡片界面*********************************************************************

//        PfLinkData pflink = new PfLinkData();

//

//        pflink.setBillID("1001ZZ1000000000000Q"); // 本单据ID

//

//        pflink.setBillType("SALE"); // 本单据类型

//

//        pflink.setSourceBillType("SALE"); // 上游单据类型

//

//        pflink.setPkOrg("0001ZZ1000000000074A"); // 公司

//

//        int height = ClientToolKit.getUserHeight()-40;

//

//        int width = ClientToolKit.getUserWidth()-40;

//        FuncletWindowLauncher.openFuncNodeForceModalDialog(null, frvO,new FuncletInitData(1, pflink),null, true, new Dimension(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 = ClientToolKit.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);

       //非模态窗体在原来窗体页签打开

       FuncletWindowLauncher.openFuncNodeInTabbedPane(parent, FrvO, new FuncletInitData(3, bdlinkdata), null,false);

      

//**********第三种:根据功能注册节点打开列表界面*********************************************************************    

       //SFClientUtil.open(parent, funCode);       

       

       String[] script = new String[]{"if(opener)opener.ncNodeAppletMap.put('"+systemcode+"',findNCApplet())"};

       ClientToolKit.callJavaScript("eval", script);

    }

 

}

 

 

2步:部署到nchome中对用模块的client中,我的测试模块是lfwdemo,如下图:

 

 

3步:访问测试,访问两个步骤

1.      首先令牌注册,在IE浏览器中,输入下面url。注意:帐套编码busiCente最好是填写上,否则在登录的时候要求选择帐套

http://127.0.0.1/service/ssoRegServlet?ssoKey=123459483230949&userCode=admin&busiCenter=dev

2然后在IE浏览器中,输入下面url,就可以直接打开人员的卡片界面了

http://127.0.0.1/login.jsp?ssoKey=123459483230949&clienttype=portal&uiloader=nc.demo.bx.uiloader.CustomPortalUILoader&nodeid=10140PSN&pk_psndoc=1001ZZ1000000000000Q

3.  单点登录配置文件详述

单点登录的配置文件路径为${NCHOME}\ierp\sf\ssoConfig.xml

该文件默认的内容如下:

 

<?xml version="1.0" encoding="UTF-8"?>

<SSOConfig>

         <regTimeOut>200</regTimeOut>

         <authenticator classname="nc.sso.bs.DefaultSSOAuthenticator">

                   <listParam key="IPAddress">

                            <string>127.0.0.1</string>

                   </listParam>

         </authenticator>

</SSOConfig>

 

 

 

 

 

 

 

 

 

 

 

 


在这个配置文件中主要可以配置两个信息

1 注册信息的超时设置

2 注册时的验证处理类

3.1.  注册信息的超时设置

         当用户注册完用户的登录信息后,在还没有进行登录之前,注册的登录信息将保存在NC系统中。在用户开始登录NC时,该注册信息才会从NC系统中被清除。

         如果由于某种原因,用户没有触发登录操作,那么注册信息将在超时后,被系统自动清除掉,这个超时的时间值的配置是在配置文件中的<regTimeOut>标签项配置的,单位为秒。默认值为200秒。

         如果用户是在超时以后才登录NC,那么登录将会失败,会提示找不到注册信息。

 

3.2.  注册时的验证处理

         由于只要向NC系统中注册了用户的登录信息,就可以单点登录到NC。所以从安全考虑,需要再注册用户的登录信息时进行权限验证。

         单点登录注册时采用的验证类的配置是在配置文件中的< authenticator >标签项配置的。

通过classname属性指定验证类的类名,该类必须实现nc.sso.bs.ISSOAuthenticator接口。

publicinterface ISSOAuthenticator {

    publicvoid authenticate(HttpServletRequest request) throws Exception;

}

 

 

 

 

 

 

 


默认的验证类为nc.sso.bs.DefaultSSOAuthenticator,该验证类将检查注册的URL的来源主机的ip地址是否在其所配置的合法ip地址的范围内,如果是,则允许注册,否则,将拒绝注册。

         如果希望提供更加安全的验证处理,可以通过实现nc.sso.bs.ISSOAuthenticato接口并注册在配置文件中即可

3.3.  nc.sso.bs.AbstractSSOAuthenticator

AbstractSSOAuthenticator类是一个实现了ISSOAuthenticato接口的抽象类,他提供了获取参数的方法String getValue(String key)String[]getValues(String key)这些参数是在配置文件中进行配置的。所以在实现注册时的验证处理类时,如果需要能拥有获取配置文件中参数的功能,可以直接继承AbstractSSOAuthenticator类。

         参数的配置提供两种标签:

1.      字符串参数的配置标签<param>

                           <paramkey=”key1” value=”value1”>

                   这类参数值可以通过StringgetValue(String key)方法获取

2.      字符串数组参数的配置标签<listParam>

           <listParamkey="key">

                    <string>value1</string>

                    <string>value2</string>

                    <string>value3</string>

                   </listParam>

这类参数值可以通过String[]getValues(String key)方法获取

 

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SSO(Single sign-on)即单点登录技术。它是指在多个子系统的大型应用中,用户在子系统之间进行切换时,不需要每次都重新输入用户的身份信息,从而到一处认证,整个应用系统都能有效识别。单点登录技术的系统集成功能为当前企事业单位尤其是大型多子系统企业系统集成提供了完美的解决方案。它使得这些原有系统能够合理的集成起来,对外提供统一的界面风格和唯一的登录入口。单点登录只是一种功能概念,并没有对具体的实现方式进行定义和限制。NC-Portal单点登录方案,就是SSO技术的一种实现方式。 NC-Portal的SSO方案是基于凭证的思想设计。对于NC-Portal集成的每个第三方系统都有一个制作凭证的页面,该页面用于当前登录的portal用户输入对应的第三方系统的用户信息,在正常情况下,该制作凭证的页面最多出现一次。当用户输入的第三方系统登录信息进行验证后,会自动在portal系统的数据库中建立一对凭证槽和凭证信息,这对信息记录了portal用户在特定的portal布局和特定的portlet下,与该第三方系统的身份对应关系。当该用户之后登录portal并进入被集成第三方系统时,portal系统负责获取之前成功建立的对应第三方系统身份信息,并用该身份信息进行第三方系统的身份认证。这一切的操作对当前登录用户来说都是透明的,他们看到的是没有输入任何身份信息而以正确的身份进入了第三方系统。另外,在用户每次登录第三方系统时,都会根据第三方系统的要求进行身份认证,因此这个登录过程是安全的。 对于NC-Portal来说,对Web系统的集成提供了完善的支持和解决,对Web系统的集成,目前有大小之分。集成一个单独的系统如NC、IUFO、BO、OA系统采用单独的一个布局存放(当然,该布局也是由一个portlet组成),这些Web系统称为“大”系统。另外,还存在一些集成第三方系统的“小”portlet,如NC待办事务Portlet、NC报表Portlet、IUFO报表Portlet等,这些是以“小”Portlet的形式出现的。他们主要提供一些对集成系统的辅助功能,如对NC待办事务的提取、对IUFO报表信息的提取,这两种方式功能侧重点略有不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值