当前位置:文档之家› Portal集成简单介绍

Portal集成简单介绍

Portal的单点登陆和第三方的集成

一、API介绍

NC-Portal 单点登录是NC-Portal集成其它系统(目前支持Web系统)的框架和工具,NC-Portal里的SSO在实现多个系统单点登录的功能上进行了扩展:可以定义单点登录的用户来源user provider(可以是任何支持的数据来源)。因此,在具体实现与NC-Portal的集成过程中,需要注意和实现两个关键点,即:用户资料来源和单点集成。下面将分别针对两个关键点来进行介绍说明。

用户资料来源

用户资料来源是指portal用户出于何处,此处遵循如下原则,即谁的用户谁负责进行认

证并提供用户信息。当然,在一次系统部署中,用户来源仅能出于一处,即用户仅能由一方进行提供。

关于用户来源的实现,定义了一个接口,即IUserProvider,它负责对用户信息进行验证并提供查询和更新用户信息的操作。通过这些操作,portal便可以将关于用户来源的处理完全依赖于IUserProvider的实现类来进行维护和操作。

图2、用户资料来源的相关涉及类

用户资料来源在Portal集成过程中并不是必需的,只有希望Portal使用现有的用户信息作为Portal用户时,才需要实现该接口。

接口IUserProvider的主要组成如下:

单点集成

当第三方系统与Portal进行集成时,必须实现Portal的单点集成接口:IWebAppLoginService。该接口负责完成生成凭证的过程,并定制生成凭证所需要用户提供的信息域。

图3 单点登录相关接口

WebApplicationPortlet是个通用的登录集成Portlet,通过调用配置文件指定的IWebApploginService实现来完成具体的应用系统集成,该portlet的view模式作系统展现和edit模式进行credential制作(如录入用户名,密码等被集成方需要的登录信息)。界面做成通用的登陆集成UI(JSP),具体应用系统通过实现IWebAppLoginService来完成具体应用系统的集成。

接口IWebAppLoginService的接口如下所示:

二、开发流程

在集成NC-Portal 时,主要实现IWebAppLoginService接口,如果希望使用已有的用户作为Portal用户使用,则还需要实现IUserProvider接口。

下面分别介绍IUserProvider接口的主要方法。

实现IuserProvider接口

UserVO authenticateUser(String userName, String password)

throws UserNotFoundException, UserAccessException,

BusinessException;

authenticateUser方法对用户信息进行认证,在该方法中,连接的用户库是希望

Portal使用的数据库。完成用户信息的认证逻辑。

UserVO authenticateCookieUser(String userName, String password) throws UserNotFoundException, UserAccessException,

BusinessException;

authenticateCookieUser方法对在cookie中存储的用户信息进行认证。因为在某

些情况下,cookie中存储的用户信息需要经过特殊处理,因此以上两个方法不能够合并。

List getUsers(int pageSize,int pageNumber,String userId) throws BusinessException;

getUsers方法使用模糊查询并进行分页显示用户信息。

int getCountofUsers(String userId) throws BusinessException; getCountofUsers方法通过模糊查询获取符合条件的用户记录条数。

void updateUser(UserVO user) throws BusinessException;

updateUser方法实现对用户信息的更新操作。

UserVO getUser(String userId) throws BusinessException;

getUser方法通过精确查询获取某个特定用户的信息,如果用户不存在,则返回null。

从以上介绍可以看出,IUserProvider实现了对用户信息的认证及管理维护功能,通过将用户的操作信息进行托管,实现了Portal与第三方用户来源的依赖解耦。

实现SimpleWebAppLoginService接口

1,对于第三方系统是标准的基本认证。即,认证时由浏览器弹出认证框,输入用户名密码的标准认证,我们可不必做二次开发,直接使用Portal提供的iframe集成Portlet搞定。

2,对于第三方系统是标准的表单认证,同上

3,对于非以上情况系统,需要按照我们的接口机制进行,也是你们现在做的,它们都需要第三方系统配合。主要有以下情况:

3.1最简单的,我们在实现Gate URL时直接把对照的用户密码放入url中,比如

http://localhost/iufo.jsp?username=a&passwd=a,这里要求iufo.jsp必须接收这个用户名和密码的传输方式。这种方式是iufo被集成的方式,但不推荐使用,因为密码明文传输

3.2另一种,也是你们现在用的方式,在实现认证类时,先通过表单认证进行regester,这里需要对方系统的相应url能接收到这些参数(用户名,密码),并且进行验证,如果验证正确,应该写出一段随机吗,并且把随机码和用户的对应先缓存起来,portal这边获得这段随机码,形成gateurl,比如http://localhost/iufo.jsp?randcode=123456。 iufo.jsp在接收到这个随机码时,应该从缓存中获得这段随机码和哪个用户名密码对照,然后把用户放入session并继续导向到指定主页。

这个要求第三方系统配合,有这么段逻辑和页面。BO是这样做的。

这种方式也是推荐的方式,优点是相对安全,稳定,很多系统都配备了这种被集成方式。即使不存在,进行相应的页面开发大概也就几十分钟。

3.3,最后一种,比较麻烦,就是Portal通过第三方系统校验,如果成功,就写入cookie,然后第三方系统的页面应该具备读取cookie的功能。这种方案开发也比较简单。但是,要求必须配置第三方系统和portal处于同一个域,否则iframe受限,不能获取cookie。部署起来相对麻烦。这是IBM的lotus被集成的标准方式。

其实很简单,当web系统被其他系统(portal)集成的时候,由于安全原因cookie信息是不容易被记录的,导致通过cookie记录的sessionID丢失,最终导致每次都需要重新建立session。解决的方法是严格遵守JavaEE关于web的开发规范,将url链接调用

response.encodeURL处理,这样服务器会在发现cookie实效的情况下将sessionID进行传递。避免session丢失。

单点登录参数说明:

logintype:登录类型,单点登录请使用值portal

m_strUnitCode:登录单位

m_strUserCode:登录用户

m_strPassword:登录密码

m_strLoginDate:登录日期

m_strLangCode:登录语种

OA系统单点登录过来时请提供上述登录参数值,其中登录语种可不提供,默认为中文。其他必须提供。

执行步骤:

1.登录验证url:

http://127.0.0.1/service/~iufo/nc.ui.iufo.login.LoginValidateServlet?logintype=port

al&m_strUnitCode=登录单位&m_strUserCode=登录用户&m_strPassword=登录密码

&m_strLoginDate=登录日期&m_strLangCode=登录语种

如果验证通过,返回字符串为“true”;如果验证失败,页面返回具体的错误提示信息。

2.验证后登录url:

http://127.0.0.1/service/~iufo/com.ufida.web.action.ActionServlet?action=nc.ui. iufo.login.LoginAction&method=login&logintype=portal&m_strUnitCode=登录单位

&m_strUserCode=登录用户&m_strPassword=登录密码&m_strLoginDate=登录日期

&m_strLangCode=登录语种

此链接直接重定向到IUFO主页面。

有任何问题,直接联系我。

NC报表,刘应耀,liuyy@https://www.doczj.com/doc/0210755124.html, 136********

相关主题
文本预览
相关文档 最新文档