当前位置: 首页 > news >正文

成都网站建设公司高新软件开发工具及公司

成都网站建设公司高新,软件开发工具及公司,郑州手机网站制作公司哪家好,平台公司会倒闭吗前言 因为业务场景需要#xff0c;第三方系统有些工作需要经常到NC系统里做#xff0c;如果每次去NC系统做业务单据#xff0c;都需要反复登录#xff0c;导致客户使用体验不是很好#xff0c;所以需要开发实现从第三方系统单点登录到NC系统#xff0c;提高客户满意度。 … 前言 因为业务场景需要第三方系统有些工作需要经常到NC系统里做如果每次去NC系统做业务单据都需要反复登录导致客户使用体验不是很好所以需要开发实现从第三方系统单点登录到NC系统提高客户满意度。 单点登录名词解释 单点登录Single Sign On简称为 SSO是比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中用户只需要登录一次就可以访问所有相互信任的应用系统。 特别说明 本方案是基于用友集提供的【NC63单点登录方案说明文档】进行二次修改本篇文章不仅是为了记录个人开发需要也同样提供给广大开发者们。 1、详述方案说明 想要单点登录到NC首先需要在服务器端向NC服务器注册将要登录的用户的信息以及其他一些需要的信息这些信息将被保存在NC服务器上通过ssoKey进行关联映射。在完成注册信息后客户端在登录时需要提供ssoKey通过该值获得登录用户的相关信息进入NC系统。 2、注册登录信息 NC系统提供了一个Servlet来注册用户登录信息。访问该servlet的URL格式基本为 http://host:port/service/ssoRegServlet其后面可以跟随多个参数。 参数信息 【userCode】     指定用户编码该参数必须提供不能省略。 【ssoKey】     指定映射登录信息的键值并在登录时需要提供该值。该值要求唯一如果在注册时没有提供该值NC系统会自动生成一个ssoKey的值并在返回的Servlet流中输出该值。 【busiCenter】     指定用户所属的账套编码该值可以忽略。如果忽略该值并且在多个账套中都存在userCode用户那么会让终端用户选择账套。 【groupCode】     指定登录的集团编码该值可以忽略。 【langCode】     指定登录的语种该值可以忽略默认为中文。 示例 http://host:port/ service/ssoRegServlet?ssoKey16354820401userCodezhangsan 这个URL表示将以用户zhangsan的身份登录注册信息的键值为16354820401。 2.1、登录NC系统 在完成了用户登录信息的注册后客户端就可以以注册的ssoKey值来登录NC系统了登录NC系统的ssoKey值以URL参数的形式提供。http://host:port/login.jsp?ssoKeykeyvalue。 对于前面的示例 http://host:port/ service/ssoRegServlet?ssoKey16354820401userCodezhangsan 登录时的URL为http://host:port/login.jsp?ssoKey16354820401 2.2、根据功能节点打开NC界面 打开nc系统的人员页面ssoKey例如还是上面的令牌nodeid10140PSN是人员的功能注册编码 http://127.0.0.1/login.jsp?ssoKey123459483230949clienttypeportaluiloadernc.uap.lfw.applet.PortalUILoadernodeid10140PSN 2.3、自定义uiLoader打开NC任意界面  在上一章节中是根据功能节点打开列表界面那么如何打开单据卡片界面呢或者如何打开流程卡片界面等等。所以需要自己开发一个uiLoader类进行处理如下图所示如何集成打开一个人员卡片界面。 开发过程 2.3.1、 编写java类 定义一个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;public class CustomPortalUILoader extends SSOLoader {Overridepublic void appletInited() {//父窗体Component parent WorkbenchEnvironment.getInstance().getWorkbench();String param ClientToolKit.getAppletParam(nodeId);String systemcodelocal;//默认系统编码//功能注册节点String funCodeparam;//人员pkString pk_psndoc ClientToolKit.getAppletParam(pk_psndoc);if(param.contains(:)){funCodeparam.split(:)[0];systemcodeparam.split(:)[1];}IFuncRegisterQueryService service NCLocator.getInstance().lookup(IFuncRegisterQueryService.class);FuncRegisterVO FrvOnull;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.3.2、部署 部署到nchome中对用模块的client中我的测试模块是lfwdemo。如图 2.3.3、测试 1、首先令牌注册在IE浏览器中输入下面url。注意帐套编码busiCente最好是填写上否则在登录的时候要求选择帐套。 http://127.0.0.1/service/ssoRegServlet?ssoKey123459483230949userCodeadminbusiCenterdev 2、 然后在IE浏览器中输入下面url就可以直接打开人员的卡片界面了 http://127.0.0.1/login.jsp?ssoKey123459483230949clienttypeportaluiloadernc.demo.bx.uiloader.CustomPortalUILoadernodeid10140PSNpk_psndoc1001ZZ1000000000000Q 3、单点登录配置文件详述 单点登录的配置文件路径为${NCHOME}\ierp\sf\ssoConfig.xml该文件默认的内容如下。 ?xml version1.0 encodingUTF-8? SSOConfigregTimeOut200/regTimeOutauthenticator classnamenc.sso.bs.DefaultSSOAuthenticatorlistParam keyIPAddressstring127.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接口。 public interface ISSOAuthenticator {public void authenticate(HttpServletRequest request) throws Exception; } 默认的验证类为nc.sso.bs.DefaultSSOAuthenticator该验证类将检查注册的URL的来源主机的ip地址是否在其所配置的合法ip地址的范围内如果是则允许注册否则将拒绝注册。 如果希望提供更加安全的验证处理可以通过实现nc.sso.bs.ISSOAuthenticato接口并注册在配置文件中即可。 3.3、AbstractSSOAuthenticator AbstractSSOAuthenticator类是一个实现了ISSOAuthenticato接口的抽象类他提供了获取参数的方法String getValue(String key)和String[] getValues(String key)这些参数是在配置文件中进行配置的。所以在实现注册时的验证处理类时如果需要能拥有获取配置文件中参数的功能可以直接继承AbstractSSOAuthenticator类。 参数的配置提供两种标签 1、字符串参数的配置标签 paramparam key”key1” value”value1” 这类参数值可以通过String getValue(String key)方法获取 2、字符串数组参数的配置标签 listParam listParam keykey stringvalue1/string stringvalue2/string stringvalue3/string /listParam 这类参数值可以通过String[] getValues(String key)方法获取。
http://www.zqtcl.cn/news/948104/

相关文章:

  • 网站建设自建与租用区别杭州建设局网站官网
  • 广告公司企业介绍seo研究中心怎么样
  • 苏州网站建设熊掌岳阳做网站哪家好
  • 深圳网站制作公司报价单宝塔做两个网站6
  • 百度站长工具怎么查排名贵港网站制作
  • 运城个人网站建设学校网站建设目的
  • 住房城乡建设部门门户网站购物网站排名大全
  • 手机网站平台江门网站建设模板
  • 做本地网站需要什么资质百度多长时间收录网站
  • 网站建设公司使用图片侵权使用者有无责任夸克免费空间
  • 网站建设制作鸿运通做网站能用python吗
  • 站长源码之家Wordpress 新建标签
  • 太原网站建设详细策划如何建设网站简答题
  • 乡村生态旅游网站建设方案如何做网站的导航栏
  • wordpress百度百科网站开发 seo
  • 网站主机名wordpress主题修改底部版权
  • 网站官网怎么做龙岩iot开发福建小程序建设
  • 哪个学校设有网站开发专业北京有哪些网站公司
  • 做网站需要的带宽上行还是下行湖南竞网科技有限公司
  • 帝国cms企业门户网站仿站视频教程 网盘互联网金融p2p网站建设
  • 个人网站备案涉及支付宝做二手的网站都有哪些
  • 如何给网站做宣传导航栏网页怎么制作
  • 返利网站建设高校精神文明建设网站
  • 河北百度推广seoseo全网优化指南
  • 网站建设网页开发一个类引用另一个类的方法
  • 第四章第二节网站建设的教学设计云南网站建设一度科技公司
  • php 搭建手机网站建e网app下载
  • 河北手机版建站系统价格微信怎么开店铺小程序
  • 中国建设教育网官网是什么网站潮州seo建站
  • 如何做个购物网站学校网站设计的目的