NCV63-portal单点登录集成方案
来源:互联网 发布:电脑学习软件 编辑:程序博客网 时间:2024/06/05 17:37
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来注册用户登录信息。访问该servlet的URL格式基本为:
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;
importjava.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;
importnc.ui.pub.msg.PfLinkData;
importnc.ui.uap.sf.SFClientUtil;
import nc.vo.bd.psn.PsndocVO;
import nc.vo.pub.BusinessException;
import nc.vo.sm.funcreg.FuncRegisterVO;
publicclass CustomPortalUILoaderextends 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);
intheight = ClientToolKit.getUserHeight()-40;
intwidth = 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)方法获取
- NCV63-portal单点登录集成方案
- 互联网单点登录集成方案
- IBM Portal与单点登录、集成企业级应用
- IBM Portal与单点登录、集成企业级应用
- iMatrix平台的Portal集成单点登录服务
- JEESZ分布式框架--单点登录集成方案
- JEESZ分布式框架--单点登录集成方案
- JEESZ分布式框架--单点登录集成方案
- JEESZ分布式框架--单点登录集成方案
- JEESZ分布式框架--单点登录集成方案
- 单点登录方案
- openmeetings cas liferay portal 单点登录
- WebSphere portal与Domino单点登录配置
- shiro 集成cas单点登录
- 单点登录方案(SSO)
- CAS单点登录方案配置
- PHP 单点登录实现方案
- FineReport和泛微OA(Ecology)的单点登录集成方案
- javascript自制alert提示框
- 欢迎使用CSDN-markdown编辑器
- java-jvm-jstack-(监视器和锁的概念)
- BZOJ4810 [Ynoi2017]由乃的玉米田
- 编译环境搭建计划(2017.4.7 ~ 2017.4.9)
- NCV63-portal单点登录集成方案
- Spring 之 IOC/DI
- 99乘法表
- tensorflow03 《TensorFlow实战Google深度学习框架》笔记-04-01
- jquey ajax 将变量值封装json传入JAVA action获取解析
- nginx配置uwsgi
- C#爬虫
- 成员函数的重载,覆盖,与隐藏
- [AHK]利用Shell.Application对象批量改名