Portal技术红皮书.doc_第1页
Portal技术红皮书.doc_第2页
Portal技术红皮书.doc_第3页
Portal技术红皮书.doc_第4页
Portal技术红皮书.doc_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Portal技术红皮书NC-UAP 5.0用友NC-UAP2020-02-111第 页目 录第一章前言11.什么是Portal1Portal从本质上来说就是一个内容聚集的平台。12.NC Portal的简介13本版新增特性14.本手册针对用户群2第二章NC Portal容器31.NC Portal框架图32.NC Portal的界面用语33.NC Portal页面展现序列图44.NC Portal结构45.Portal及Portlet的国际化5第三章 NC Portal的安装与配置6第三章现有Portlet的使用 及新Portlet开发81.Portlet的介绍82.NC Portal的内置Portlet82.1Portal管理Portlet82.2CMS管理Portlet82.3IFramePortlet83.Portlet的开发实例93.1基于JSP视图技术的 Portlet的开发103.2基于Spring MVC框架的Portlet开发123.3如何利用Ajax163.4如何利用IFramePortlet进行简单第三方系统集成16第四章选择合适的登录方式及用户来源181.整体概述182.用户来源183.用户认证方式及配置21第五章单点登录及系统集成251.概念介绍252.整体介绍273.API介绍284.开发流程294.1IWebAppLoginService接口的方法介绍304.2系统开发过程315.集成实例附录365.1与IUFO的集成365.2与BO的集成37第六章Portal主题开发38附录381.引用的技术文档38第 39 页第一章 前言1. 什么是Portal许多企业和组织需要为企业内部员工、外部客户群体量身定制有“价值”的企业信息,但是,一方面是好些有“价值”的企业信息获取并不是一件轻松的事情,信息部门需要整合来自不同的应用系统,不同数据源,不同平台的无数各种类型的数据和资源;另一方面,如何轻松实现一个为所有的用户群体量身定制的系统构架也不是一件容易的事情。传统技术整合这些资源的技术复杂度和成本都太高,许多企业无法负担如此的投入。Portal 技术的出现,带给人们解决这类难题的曙光。Portal技术强调以用户为中心,提供个性化、单点登录、不同来源的内容整合功能,从而实现了信息的集中访问。Portal从本质上来说就是一个内容聚集的平台。2. NC Portal的简介NC Portal是基于JSR168规范而实现的一套J2EE技术体系架构的Portal。它构建于NC基础服务与NC Web Frame基础Web框架之上,完美融合ajax技术与Spring MVC技术,提供了灵活而丰富的个性化和管理定制功能。NC Portal允许多种安全认证方式和自选第三方系统用户来源,采取了基于角色访问控制(RBAC)的权限模型。并提供了完善和通用的第三方系统集成框架和单点登录框架,NCPortal与NC ERP紧密集成,发版默认集成NC、IUFO、BO等应用,并支持C/S程序集成。实施SSO比商业Portal简单易用。它提供的Portal管理功能,允许管理员在运行态对Portal进行定制,而无需重启甚至编码。同时,内建的换肤机制使得实现自定义皮肤非常简单,只需完成相应图片的替换即可。NC Portal引入了一些通用的API,使得Portlet可轻松调用Ajax,以及使用NC RichClient组件。3本版新增特性3.1 与NC ERP更加紧密、稳定集成3.2 增加Portal中打开NC任意节点Portlet,并支持管理员定制和用户个性化定制3.3 增加Portal对CS客户端程序集成Portlet。3.4 完善IUFO报表列表Portlet。3.5 完善对NC查询引擎报表的支持。3.6 增加NC代办事务Portlet。3.7 基于UAP LFW开发框架,将Portal管理部分完全重写。管理更直观、方便。3.8 提高了整个页面的渲染速度4.本手册针对用户群本手册主要面向二次开发和实施人员,内容涵盖基于NC Portal的二次开发,第三方应用集成,Portal的安装配置,及基于现有Portal内置功能进行快速定制等方面。如果需要更详细的使用信息,请参考相应用户使用手册。相关参考文档:第二章 NC Portal容器1. NC Portal框架图2. NC Portal的界面用语在NC Portal中,每一个Tab控件页签对应着一个布局定义。布局即一个tab页内容的描述,它由多个列构成,每个列又由Portlets组成。布局可由管理员动态定制,并可在运行时修改。布局可嵌套布局,从而组成相对复杂的界面。一个布局中的portlet不能重复。布局和Portlet的访问控制,是由基于角色的权限控制模型定义的。因此,管理员可在运行时,通过Portal管理Portlet,对各种资源进行安全管理。3. NC Portal页面展现序列图在NC Portal中,Portlet的展现是一个异步的过程。因此一定要注意多个ajax异步请求操作潜在的对session的并发访问问题。同时,NC Portal也提供了对Portlet内容的缓存方案(兼容JSR168规范),可设置全局缓存(针对所有用户一致的内容),按用户缓存(不同用户看到不同的内容),及细粒度的按状态缓存(比如只缓存视图状态而不缓存编辑状态)。部署Portlet时可按照需要设置缓存,从而有效提高页面展现速度,减少对服务器端的压力。(本版已经默认进行了细粒度缓存,不推荐继续使用)4. NC Portal结构新版NC Portal构建于uapweb基础服务之上,安装portal需要已经安装lfw web应用。同时,新版NC Portal支持改变context名称。比如要将 http:/localhost/portal改变为http:/localhost/p 只需要重新命名hotwebs目录下的portal目录名称为p即可。新版NC Portal基础组件和服务来自于lfw应用,本身的代码进行了大面积的删减和优化。稳定性增强,二次开发难度相应降低。5. Portal及Portlet的国际化Portal容器及内置Portlet的多语化是基于NC的多语机制,并符合JSR168规范。二次开发的Portlet需参照规范的方式实现自定义ResourceBundle,或者直接使用NC Portal的通用多语言资源绑定类,SpringResourceBundle(推荐)。有关NC的国际化机制请参考相应的文档。这里需要提出的是,NC Portal针对JSP页面,封装了简单的多语化EL表达式,可直接在页面中调用 $ml:trans(key to translate)即可,java类中可直接调用LanguageUtil工具类中的相应方法进行。第三章 NC Portal的安装与配置1NC Portal安装NC Portal是作为NC的一个模块安装。它使用NC中定义的数据源,并且通过NC帐套初始化方式初始化数据源。NC Portal本身是不需要帐套的,同时也建议为Portal单独定义一个数据源,数据源名称可任意,只需在配置Portal时指明使用此数据源即可。可在建立一个NC帐套并对对应Portal数据源初始化之后,将帐套删除。安装好NC Portal模块之后,使用NC_HOME/bin下的ncSysConfig.bat配置工具,和其它模块一样,配置数据源并部署之后,点击功能列表的Portal标签。 点击Portal功能点的Portal子页签,然后点击读取。内容如下:数据源:请选择配置给NC Portal用的实际数据源名称主题和配色方案:选择Portal内置主题和配色方案新加用户默认密码:此选项指明管理员新增用户时默认设置的密码。*存放位置:各部分附件和图片对应的上传位置。如果在配置并使用之后要更改存放目录,则需要在此工具中先指明新的位置,并将旧的文件移动到新目录中,并重启应用服务器即可。新用户缺省角色名:如果一个用户没有任何角色,分配给他的默认角色,可以为空。注意:PORTAL_USER并不是默认实际存在的角色,需要在portal后台管理中的角色管理中添加此角色。是否启用随机码:如果启用,则在Portal登录页面中将出现随即验证数字。是否在用户除此登录时强制修改密码:选中此项,将强制用户在登陆portal后修改一次密码,即使不修改并关闭浏览器,下次登录仍然会强制修改。PortalSSO页签用来配置各个被集成系统信息,目前包含NC ERP,IUFO,BO,具体请参考Portal单点登录与系统集成章节相关配置。在各个选项配置完毕之后,启动应用服务器,配置帐套并初始化Portal数据源,如果帐套不再使用,可删除。重启应用服务器,以http:/ip地址:端口/portal访问portal。NC Portal默认提供了admin/admin用户进行初始管理。NC Portal各种管理选项,请参考NC Poral用户手册2从旧版本升级NC Portal502相比其它版本Portal的库表结构发生了一些变化,如果需要进行旧版本升级。只需要启动NC应用服务器(在此之前确认数据源等各项配置配置正确),并输入http:/localhost/portal/upgrade即可。按照提示点击“升级”,完成库结构和数据存储方式的升级,如果发生异常请查看nclog下的portal日志,里面记录了详细的升级失败的原因。第三章 现有Portlet的使用及新Portlet开发1. Portlet的介绍一个Portlet就是一个独立的web应用。它通过Portlet容器与Portal服务打交道。从本质上来说,它是一个网页内容片段,众多portlet通过portal页面组织在一起而形成一个完整的页面。因此,只要符合JSR168规范,这个Portlet就可以享受到所有符合此规范的Portal容器所带来的服务与功能。对于一个Portlet,区分为多种状态(state)和多种模式(mode)。在NC Portal中,支持Portlet的最大化(Maximized),最小化(Mininized)和正常(Normal)状态,以及支持视图(View),编辑(Edit)和帮助(Help)三种视图模式。一个Portlet所拥有的模式和状态是通过配置而从这里面选取的子集。完整的Portlet的定义请参阅JSR168规范的文档。2. NC Portal的内置Portlet2.1 Portal管理PortletPortal管理Portlet提供了Portal容器的管理功能。包括用户管理,角色管理,资源管理,Portlet管理,布局定义等功能节点。此Portlet在NC轻量级开发框架基础上开发,使NC Portal可在运行时完成大量的个性定制和Portal系统管理而无须重启服务器和重新编码。2.2 CMS管理PortletCMS管理Portlet提供了几个常用功能,包括新闻管理,论坛管理,公司发文管理,公告管理及连接管理等。新闻管理和连接管理提供了比较灵活的功能,配合其它Portlet可快速构建网页内容。Portal管理和CMS管理Portlet的使用在NC Portal的用户使用文档中有详细介绍,本文上一章节也有部分描述。2.3 IFramePortletIFramePortlet是一通用简单集成Portlet,既可用于某个用户个性化定制时引入外部网站,也可用于管理员为所有用户定制内容。管理员定制:管理员可定制此Portlet完成对一现存站点的引入,可以定义任意数量。比如:将常用站点 引入Portal的一个页签中,只需要做下面几步:在Portal管理中选择新建系统布局,输入如下:选中IFramePortlet并双击,输入一个名称,比如用友网站,点击保存即可。为此布局和Portlet进行授权,然后注销并重进,即可看到此布局。在portlet管理中该Portlet可以配置的个性化信息如下:1 src:该portlet引入的网页地址2 height-normal:该属性决定了Iframe的高度,设置为0表示自适应高度2.4 RssPortletRss Portlet是读取RSS站点内容的通用Portlet。此Portlet的使用请参考用户使用文档。需要注意的是,此Portlet在使用过程中可能会遇到浏览器的权限问题,这个问题可通过配置后台代理解决。具体方式是在ierp/portal/perties中设置portal.rss.mode=1。如果需要代理,可设置#http xy.host=#http proxy xy.port=#http proxy xy.username=#http proxy xy.password=#http proxy xy.domain=2.5 Company Notice Portlet公司通知portlet是显示发布公告的通用Portlet。在portlet管理中该Portlet可以配置的个性化信息如下:1 itemCount:默认显示的通知条数,管理员设置此属性将影响所有的用户的显示条数2 pageHeight:该portlet的高度,整数。3. Portlet的开发实例一个Portlet的开发,通常来说要走下面几步:(1) 按照规范实现javax.portlet.Portlet接口。(2) 编写相关的页面文件(任何Portal容器支持的视图技术)。(3) 在配置文件portlet.xml中配置此Portlet。如果Portlet相对较复杂,可能还会选择不同的持久化技术(Hibernate,ibatis,jdo等),以及不同的mvc框架和视图框架的组合(sprint,struts,jsf,tapestry等)。NC Portal针对基于JSP,JSF和基于spring mvc技术的Portlet开发实现了一套基类。大多数情况下无需重新实现Portlet接口,只需进行相关的流程类的编写即可。在整个Portlet的编写过程中,我们推荐的组合是NC JdbcFramework (持久层)+NC IOC + spring mvc + jsp技术(请参阅相应的文档)。通过我们的开发环境以及NC Portal的内置支持,这种看似复杂的组合实现起来就比较简单了。 NC Portal为多种模版技术的Portlet开发提供了内置支持,并抽象出了相应的基类。大大简化了Portlet的开发难度。下面以几个简单的Portlet作为样例:3.1 基于JSP视图技术的 Portlet的开发JSP Portlet适用于业务流程简单,只作简单展现的Portlet。以一个具有view和edit状态的简单Portlet为例。我们可以直接采用NC Portal提供的JspPortlet作为Portlet接口的实现类。针对各种状态,我们需要写出相应的JSP页。首先建立视图状态下的jsp页面,helloworldview.jsp,内容如下: Hello,this portlet is in view mode!其中 为NC Portal提供的常用Tag和类引用的定义。推荐使用。是JSR168规范要求的变量声明定义。它将把renderRequest,renderResponse,及PortletConfig放置在此Page中,以供引用。剩下的内容就是一个普通的html所具有的内容。其中需要注意四点:1.此部分内容只是一内容片段。不能包含等信息。2.推荐以包裹整个内容片段。这样可更清晰的区分整个Portlet内容的结构。3.虽然基于jsp技术,但Portlet内容体不推荐使用request,response和session等区域变量。应代之以renderRequest, renderResponse,portletSession等在中定义的页面变量。4.页面允许script语法。但是推荐放置于之外,如下面同理,建立一个helloworldedit.jsp,内容如下 Hello,this portlet is in view mode!这样就完成了Portlet两个状态页的定义。下面需要在Portlet的定义文件WEB-INF/conf/portlet.xml中配置此Portlet.在WEB-INFconfportlet.xml中,我们添加HelloworldPortlet的定义,此Portlet的定义文件由JSR168规范定义Helloworld PortletHelloworldPortlet /注意不能和已有的重复 Helloworld Portletview-jsp /指明View模式下的jsp页面/html/portlets/helloworld/helloworldview.jspedit-jsp/指明Edit模式下的jsp页面/html/portlets/helloworld/helloworldedit.jsp /是否需要Portlet外边框。(推荐)decoratortruenc.bs.portlet.JspPortlet /Portlet实现类。统一使用此类0/是否启用缓存 -1,永不过期。0,不启用,0的数字,以分钟为单位指明缓存失效时间/在html展现方案中支持集中模式。此处支持view,edittext/htmlvieweditEN/支持的语言种类nc.bs.portlet.SpringResourceBundle /对应的多语言资源类,如果使用NC 多语言机制,统一使用此类/Portlet其它信息定义Hello world PortletHello worldhello,world/Portlet可能会用到的属性定义!- -ROLE_ADMIN定义完毕Portlet,我们还需要在Portlet的分类定义文件中定义此Portlet。在WEB-INF/conf/display.xml中,在某一个category下,加上一条:到此,Portlet的开发与定义完成。重启服务器。打开Portal页面,可以在个人设置或者Portal管理-布局管理中添加此Portlet。3.2 基于Spring MVC框架的Portlet开发Spring mvc框架小巧,灵活,稳定,不会像其它MVC框架一样将流程绑的太死,这也是笔者推荐它的主要原因。关于Spring MVC的使用,请参考Spring相关技术文档。当然,在NC Portal中使用其它框架也是允许的。此处仅介绍spring mvc在NC Portal中的配置与应该注意的地方。NC Portal针对Spring MVC提供了ActionPortlet的实现。与JspPortlet相似,基于此Portlet的开发仅需要开发相应的页面流程即可。下面以自定义链接Portlet作为样例,具体需求是这样的:用户可在编辑模式下增加自己需要的链接地址,在视图模式下按照列表形式显示所有链接。我们按照下面的次序完成此Portlet:a建表并编写对应VO类。create table pub_mylink (pk_mylink char(20) primary key, name varchar(20) not null, url varchar(100) not null)对应MylinkVO.javapackage nc.portlet.mylinks;import nc.jdbc.framework.orm.IPersistenceObject;import nc.vo.pub.portal.base.ValueObject;public class MylinkVO implements ValueObject, IPersistenceObjectprivate String pk_mylink;private String name;private String url;public String getPrimaryKey() return pk_mylink;public String getTableName() return pub_mylink;public String getName() return name;public void setName(String name) = name;public String getPk_mylink() return pk_mylink;public void setPk_mylink(String pk_mylink) this.pk_mylink = pk_mylink;public String getUrl() return url;public void setUrl(String url) this.url = url;b. 编写BS接口类及实现。查询服务接口ImylinkQueryServicepackage nc.portlet.mylinks;import nc.vo.pub.BusinessException;public interface IMylinkQueryService public MylinkVO getAllLinks(String userId) throws BusinessException;插入服务接口IMylinkServicepackage nc.portlet.mylinks;import nc.vo.pub.BusinessException;public interface IMylinkService public String insertMylinkVO(MylinkVO vo) throws BusinessException;编写对应ActionUrl的处理类package nc.portlet.mylinks;import javax.portlet.ActionRequest;import javax.portlet.ActionResponse;import mon.NCLocator;import mon.PortletBaseAction;import nc.vo.pub.portal.exception.ServiceException;public class MylinkEditAction_N extends PortletBaseAction public void processAction(ActionRequest req, ActionResponse res)throws ServiceException, Exception String name = req.getParameter(name);String url = req.getParameter(url);MylinkVO vo = new MylinkVO();vo.setName(name);vo.setUrl(url);IMylinkService service = (IMylinkService) NCLocator.getInstance().lookup(IMylinkService.class.getName();service.insertMylinkVO(vo);setForward(req, /mylink/view);参考Jdbcframework相关文档,依次实现以上两个接口。c. 编写对应的Action编写View状态对应的类package nc.portlet.mylinks;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import mon.NCLocator;import nc.bs.portal.util.SecurityUtil;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.mvc.Controller;public class MylinkViewAction implements Controller private static final String VIEW_PAGE = mylinks/view;public ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response) throws Exception IMylinkQueryService queryService = (IMylinkQueryService) NCLocator.getInstance().lookup(IMylinkQueryService.class.getName();String userId = SecurityUtil.getUserId(request);MylinkVO linkVos = queryService.getAllLinks(userId);request.setAttribute(linkvos, linkVos);return new ModelAndView(VIEW_PAGE);编写对应的jsp文件,按照上面路径配置的jsp,应该放置于/html/portlets/mylinks/view.jsp 与/html/portlets/mylinks/edit.jspView.jsp$Edit.jspform name=link_edit_form onsubmit=return sys_checklink_valid(this); action= method=post链接名称链接地址window.sys_checklink_valid = function(form)return true;d. 配置并运行。 参考NC服务配置分别配置 /mylink/view /mylink/edit /mylink_n/edit,并按照JspPortlet的方式配置portlet.xml.重起中间件即可3.3 如何利用AjaxNC Portal对ajax进行了一定的封装,使用ajax,可直接调用loadPage(url, param, return func, return args, method, asyn);参数分别是:目标URL,目标参数,异步回调函数,回调函数将会用到的参数传递,调用方法(Post true, get false),默认为POST,是否异步调用,默认是异步.因此,可以这样调用 loadPage(“”);loadPage(, null, null, null, true, false)如果调用方式为异步,则返回结果会通过回调函数返回。此回调函数会接受三个参数,xmlHttpRequest对象,returnArgs数组对象,以及exception对象。如果exception对象不为空,则表示调用过程出现了异常。需要注意的是,如果是Portlet URL,不能直接使用此调用。需调用我们提供的全局函数triggerLinkAction(url, param);比如:var url = “”;var param = “cmd=update”;triggerLinkAction(url, param);此调用的结果将会被Portlet容器接受并自动转换为Portlet内容。3.4 如何利用IFramePortlet进行简单第三方系统集成IFramePortlet是一个通用的外部应用集成Portlet,利用此Portlet,可以直接将第三方系统集成进来。但是此Portlet仅适用于对外部应用的简单集成,如果想做到单点登录,请参考第五章,Portal SSO技术。使用IFramePortlet,只需在WEB-INF/conf/portlet.xml中,添加一个Portlet定义:Integrate PortletIntegratePortletIntegrate Portletnc.bs.portlet.IFramePortlet0text/htmlviewENnc.bs.portlet.SpringResourceBundleIntegrate PortletIntegrateIntegratesrcheight-normal0ROLE_ADMIN/portlet第四章 选择合适的登录方式及用户来源1. 整体概述NC-Portal具有完善的用户认证方案,在502的版本中这些功能得到了进一步的加强。使得对用户认证方式的选择变得更加灵活,同时也是用户来源方案与后台的用户管理更好的统一起来,达到完美的结合。在NC-Portal中,系统可以轻松适配第三方的用户库,使其成为Portal系统的合法用户。这样做可以为系统的部署和实施提供很大的方便,二次开发人员只需要做很少量的代码开发就可以使Portal系统使用已有的用户库。同时,整个portal系统的用户管理、授权以及权限控制都会通过此适配器实现对原有用户的维护和管理。NC-Portal提供了完善的用户认证方案。502的版本提供了Portal Form认证、域认证以及Basic认证,也有对数字证书认证的支持方案。另外,如果用户有个性化的认证需求,我们也提供了灵活的接口,完成少量接口的代码实现后经过简单的配置就可以达到满意的效果。2. 用户来源2.1 概念介绍用户资料来源是指portal用户出于何处,此处遵循如下原则,即谁的用户谁负责进行认证并提供用户信息。当然,在一次系统部署中,用户来源仅能出于一处,即用户仅能由一方进行提供。该用户只要是支持对现有用户库的支持。在Portal系统的实施中,经常遇到客户已经有了用户数据库,如果再重新建立Portal用户库,可能需要作比较繁琐的数据转换,该功能对这个情况能够很好的支持,仅需要实现一个接口进行适配即可。关于用户来源的实现,定义了一个接口,即IUserProvider,它负责对用户信息进行验证并提供查询和更新用户信息的操作。通过这些操作,portal便可以将关于用户来源的处理完全依赖于IUserProvider的实现类来进行维护和操作。图2、用户资料来源的相关涉及类用户资料来源在Portal集成过程中并不是必需的,Portal提供了默认的实现PortalUserProvider,该方法使用Portal本身的用户库。只有希望Portal使用现有的用户信息作为Portal用户时,才需要实现该接口。另外,如果系统配置未第三方的用户库,则在portal数据库中也会存在该用户的个性化信息,这个过程在每个用户初次登录portal系统时自动完成,这样保证了用户身份信息与用户个性化信息的分离,身份信息由第三方库进行维护并以第三方库为准。2.2 接口列表接口IUserProvider的主要组成如下:public interface IUserProvider UserVO authenticateUser(String userName, String password)throws UserNotFoundException, UserAccessException,BusinessException;List getUsers(int pageSize,int pageNumber,String userId) throws BusinessException; int getCountofUsers(String userId) throws BusinessException;UserVO updateUser(UserVO user) throws BusinessException;UserVO getUser(String userId) th

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论