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

下载本文档

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

文档简介

Portal技术红皮书NC-UAP 5.0用友NC-UAP2019-11-141第 页目 录第一章前言11.什么是Portal12.NC Portal的简介1第二章NC Portal容器21.NC Portal框架图22.NC Portal的界面用语23.NC Portal页面展现序列图34.NC Portal目录结构45.NC Portal管理与应用46.Portal及Portlet的国际化4第三章Portlet开发61.Portlet的介绍62.NC Portal的内置Portlet62.1Portal管理Portlet62.2CMS管理Portlet62.3IframePortlet62.4RssPortlet63.Portlet的开发实例73.1基于JSP视图技术的 Portlet的开发73.2基于Spring MVC框架的Portlet开发93.3有效利用NC Rich Client控件开发交互性更强的Portlet133.4如何利用IFramePortlet进行简单第三方系统集成143.5如何利用Ajax153.6如何利用json框架153.7如何引入自定义css和script153.8Portlet的缓存设置16第四章Portal主题开发17第五章Portal SSO技术181.概念介绍182.API介绍202.1用户资料来源202.2单点集成213.开发流程223.1IUserProvider的方法介绍233.2IWebAppLoginService接口的方法介绍233.3系统配置过程244.集成实例附录274.1与IUFO的集成274.2与BO的集成28附录301.引用的技术文档30第 30 页第一章 前言1. 什么是Portal许多企业和组织需要为企业内部员工、外部客户群体量身定制有“价值”的企业信息,但是,一方面是好些有“价值”的企业信息获取并不是一件轻松的事情,信息部门需要整合来自不同的应用系统,不同数据源,不同平台的无数各种类型的数据和资源;另一方面,如何轻松实现一个为所有的用户群体量身定制的系统构架也不是一件容易的事情。传统技术整合这些资源的技术复杂度和成本都太高,许多企业无法负担如此的投入。Portal 技术的出现,带给人们解决这类难题的曙光。Portal技术强调以用户为中心,提供个性化、单点登录、不同来源的内容整合功能,从而实现了信息的集中访问。Portal从本质上来说就是一个内容聚集的平台。2. NC Portal的简介NC Portal是基于JSR168规范而实现的一套J2EE技术体系架构的Portal。它构建于NC基础服务与NC Rich Client基础组件之上,完美融合ajax技术与Spring MVC技术,提供了灵活而丰富的个性化和管理定制功能。NC Portal允许多种安全认证方式和自选第三方系统用户来源,采取了基于角色访问控制(RBAC)的权限模型。并提供了完善和通用的第三方系统集成框架和单点登录框架,NCPortal发版默认集成NC、IUFO、BO、自定义查询报表应用,实施SSO比商业Portal简单易用。它提供的Portal管理功能,允许管理员在运行态对Portal进行定制,而无需重启甚至编码。同时,内建的换肤机制使得实现自定义皮肤非常简单,只需完成相应图片的替换即可。NC Portal提供了引入了一些通用的API,使得Portlet可轻松调用Ajax,json,以及使用NC RichClient组件。第二章 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目录结构5. NC Portal管理与应用Portal数据源设置Portal采用NC的数据源配置,只需在ierp/portal/perties中配置对应NC的数据源名即可。NC Portal开发环境配置NC Portal的开发环境即NC5.0的开发环境,请参考相应文档。6. Portal及Portlet的国际化Portal容器及内置Portlet的多语化是基于NC的多语机制,并符合JSR168规范。二次开发的Portlet需参照规范的方式实现自定义ResourceBundle,或者直接使用NC Portal的通用多语言资源绑定类,SpringResourceBundle。有关NC的国际化机制请参考相应的文档。这里需要提出的是,NC Portal针对JSP页面,封装了简单的多语化EL表达式,可直接在页面中调用 $ml:trans(key to translate)即可,java类中可直接调用LanguageUtil工具类中的相应方法进行。1. NC Portal页面中一些工具类和预置对象。SerurityUtil类是一个安全相关类。可直接从此类中提取和用户有关的信息及权限信息。StringPool类提供了常用的字符串常量定义。GetterUtil类提供了相应的字符串操作方法。ParamUtil提供了提取Http请求参数的工具方法。每个页面中都包含了一个ThemeDisplay的实例,此实例是请求级别的,可从此实例中获得大多数当前请求信息。具体每个类的操作方式请参考类自身定义和javadoc。第三章 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利用了NC Rich Client控件的灵活特性,使NC Portal可在运行时完成个性定制而无须重启服务器和重新编码。2.2 CMS管理PortletCMS管理Portlet提供了几个常用的Portlet,包括新闻管理,论坛管理,公司发文管理,公告管理及连接管理等。新闻管理和连接管理提供了比较灵活的功能,配合其它Portlet可快速构建网页内容。关于内容管理Portlet的使用,请参考NC Portal的用户使用文档。2.3 IframePortletIFramePortlet是一通用简单集成Portlet,既可用于用户个性化定制时引入外部网站的工具,也可用于管理员的静态定义。此Portlet的使用可参考3.4小节。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=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 有效利用NC Rich Client控件开发交互性更强的PortletNC Rich Client控件赋予了比传统web界面更强的交互能力。适合一些对交互性要求比较强的应用。关于如何使用NC Rich Client,请参考相关红皮书。在Portlet中应用Rich Client控件,基本与编写普通的jsp一样的流程和配置,需要注意以下两点:a.在引入时必须使用init_f.jsp代替init.jsp,这是区分是否使用Rich Client控件的关键。b.在此页中所有的代码,实际上是运行在javascript语意环境下的,所以必须以javascript语法来写。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/portlet3.5 如何利用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.6 如何利用json框架Json是对ajax的轻量封装,非常适合从js object到java object的相互转换,具体使用请参考json的相关手册。需注意的是我们对它进行了一定程度的增强,使得它可以直接注册接口服务以及转换super vo,以方便适应NC提供的服务。在使用json之前,调用 initRemoteCall();此函数实际上对json进行了初始化。如果已初始化将不会再次初始化。初始化之后的变量赋予了window.RemoteCall.因此之后就可以使用window.RemoteCall进行远程调用。3.7 如何引入自定义css和script所有需运行时由Portal引入的javascript和css文件,应该放在/html/script 和/html/css中。需注意的是,这种方式会导致Portal页面初始化载入更多的代码。如果确定某些script文件并不是在初始化时用到。建议使用全局函数dynamicAddScript(window.globalPath+ /html/script/xx.js)进行运行时动态引入。3.8 Portlet的缓存设置NC Portal实现了JSR168规范定义的缓存配置,并在此基础上进行了一定的扩充。缓存类型分为全局缓存,按用户缓存。同时这两种缓存类型都可按状态进行缓存。全局缓存:适用于所有用户看到的是同样内容的Portlet。启用这种缓存,可大大减小服务器端的压力。按用户缓存: 适用于不同用户看到不同内容的Portlet。比如与权限有关的Portlet。缓存的启用,只需按照规范在Portlet的配置中设置10,其中的10以分钟为单位。0表示不启用缓存,1表示缓存永不过期。如果启用了缓存,默认为全局缓存。可通过设置cacheType1 更改为按用户缓存。也可通过Portal管理页签进行运行时设定。所有缓存一经启用,默认按照所有状态进行缓存。可通过设置cacheState2进行状态设置。状态分别是Edit 1, VIEW 2, HELP 4,最终值为几个状态之和。此值也可以在运行时设置。第四章 Portal主题开发NC Portal的主题开发分为两部分:theme开发和colorscheme开发。Colorscheme是针对于某一theme下颜色样式。其中Theme开发难度比较大,需要对整个Portal容器有很深的理解,此处不做进一步介绍。而colorscheme开发则绝大多数是对CSS和图片的修改。ColorScheme开发:ColorScheme开发涉及到两部分。控件部分的ColorScheme开发以及Portal容器的ColorScheme开发。其中控件的ColorScheme开发基本与portal无关,唯一要求ColorScheme 的 ID与Portal的保持一致。此部分请参阅轻量级控件开发文档。Portal容器的ColorScheme的开发量,取决于所对应的Theme,大多数情况下只需替换图片与编辑/html/themes/Theme ID/ColorScheme ID/styles下的portal.css即可。Theme和ColorScheme的配置文件位于WEB-INF/conf/look-and-feel.xml下,在完成新的Theme和ColorScheme编辑之后,按照里面已有的格式配置新的定义,重启服务器,即可应用新的主题。第五章 Portal SSO技术1. 概念介绍 Sso(Single sign-on)即单点登录技术。它是指在多个子系统的大型应用中,用户在子系统之间进行切换时,不需要每次都重新输入用户的身份信息,从而做到一处认证,整个应用系统都能有效识别。单点登录只是一种功能概念,并没有对实现方式的定义和限制。NC-Portal的单点登录技术,就是SSO技术的一种实现方式。SSO的初步实现思路是:使用数据库来存储各应用系统的访问凭证并关联portal用户,在portal登录后通过登录的portal用户自动找到各应用系统的凭证直接进入各应用系统(每个应用系统一个portlet)。图1、NC-Portal SSO的凭证库模型凭证库槽用来模拟凭证库存放地,同一类凭证存放在一个凭证库槽中,一个凭证库槽就是一个用户的一个portlet的凭证存放地,这个槽中可放置多于一个的凭证。Portal用户ID:portal用户Portlet ID:portlet标识共享级别:有三个级别:专有、应用共享、全局共享。专有是只能本用户本portlet使用;应用共享是本用户同后端应用名的其它portlet也可使用;全局共享是所有用户同后端应用名都共享。共享级别直接在portlet.xml中的具体portlet的设置一个来定义,如果不设置,默认为应用共享:share_level1共享级别含义:专有0;应用共享1;全局共享2在portlet.xml中定义了什么级别,该portlet保存凭证时就以该级别创建凭证槽。在当前Portal实现中,仅支持应用共享的级别,其他级别视实际需求,在后继版本中在进行实现。凭证类型:活动型(消极型),安全性上更严密的要求,暂时不考虑实现。后端应用名:portlet类名验证用户:应用系统的用户验证密码:用户的密码对资源:除了用户、口令之外的其它登录信息,使用XML格式序列化后存储。如一个NC portlet凭证资源: accountcodeglcorppk1001 凭证库模型涉及包含两个过程:凭证的创建和凭证的维护。凭证的创建过程是通过用户登录集成第三方页面,输入合法的第三方系统用户名和密码信息来实现的。通过此过程,系统在数据库中记录凭证库槽及凭证的对应信息。如果一个用户拥有多个某个portlet对应系统的凭证,那么进入时默认以第一个进入,同时提供在edit模式下的选择或者重新输入来维护凭证,多个凭证下拉列出供选择重新登录。图2 SSO实现类图2. API介绍NC-Portal 单点登录是NC-Portal集成其它系统(目前支持Web系统)的框架和工具,NC-Portal里的SSO在实现多个系统单点登录的功能上进行了扩展:可以定义单点登录的用户来源user provider(可以是任何支持的数据来源)。因此,在具体实现与NC-Portal的集成过程中,需要注意和实现两个关键点,即:用户资料来源和单点集成。下面将分别针对两个关键点来进行介绍说明。2.1 用户资料来

温馨提示

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

评论

0/150

提交评论