V56 Portal单点登录及系统集成红皮书Word文档下载推荐.docx
- 文档编号:18909218
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:13
- 大小:21.55KB
V56 Portal单点登录及系统集成红皮书Word文档下载推荐.docx
《V56 Portal单点登录及系统集成红皮书Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《V56 Portal单点登录及系统集成红皮书Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。
http请求,通过getParameter方法可以获取用户输入的单点登录信息,通过该信息构造凭证。
providerVO:
该系统在sso-provider.xml中配置的单点信息可以从该vo中获取。
该方法获取生成凭证所需用户提供的信息域
publicExtAuthField[]getCredentialFields(HttpServletRequestreq,SSOProviderVOproviderVO,PtUserVOuserVO,PtCredentialVOcredential)throwsPortletLoginException;
http请求,通过getParameter方法可以获取用户输入的单点登录信息。
userVO:
当前portal用户的信息。
credential:
如果该用户已经拥有登录该系统的凭证信息,可以从该vo中获取原来的凭证信息
该方法获取最终进入系统的url
publicStringgetGateUrl(HttpServletRequestreq,HttpServletResponseres,PtCredentialVOcredential,SSOProviderVOproviderVO)throwsPortletLoginException;
http请求,可以从该请求中获取需要的请求变量值。
从该凭证vo中获取关联好的凭证信息,可以在返回最终的url前对该信息进行再次的校验。
该方法用于用户登录信息校验
publicStringverifyUserInfo(HttpServletRequestreq,PtCredentialVOcredentialVO,SSOProviderVOproviderVO)throwsPortletLoginException;
credentialVO:
从该凭证vo中获取关联好的凭证信息,可以在返回最终的url前对该信息进行再次的校验。
该方法用于获取集成系统指定节点的登陆URL
publicStringgetNodeGateUrl(HttpServletRequestreq,HttpServletResponseres,StringnodeId,PtCredentialVOcredential,SSOProviderVOproviderVO)throwsPortletLoginException;
从该凭证vo中获取关联好的凭证信息
该系统在sso-provider.xml中配置的单点信息可以从该vo中获取
nodeId:
指定节点的ID
1.3开发细节说明
在使用NC-Portal集成第三方系统时,主要实现IWebAppLoginService接口,下面详细介绍IWebAppLoginService接口。
1.3.1接口方法实现说明
该方法用于制作Portal用户和第三方系统用户间的凭证。
由于在getCredentialFields方法中已经指定了登录时需要验证的各个字段,所以在该方法的实现中要获取各个字段的值,代码如下:
PtCredentialVOcredentialVO=newPtCredentialVO();
StringuserId=req.getParameter("
userid"
);
Stringpassword=req.getParameter("
password"
credentialVO.setUserid(userId);
credentialVO.setPassword(password);
//用户校验
verifyUserInfo(req,credentialVO,providerVO);
returncredentialVO;
verifyUserInfo(req,credentialVO,providerVO)实现了
publicStringverifyUserInfo(HttpServletRequestreq,PtCredentialVOcredentialVO,SSOProviderVOproviderVO)throwsPortletLoginException接口
该方法用于用户登录信息校验,如果用户登录信息不合法则抛出异常,具体代码如下:
StringregistryUrl=providerVO.getValue("
registryUrl"
StringBufferparameters=newStringBuffer("
username="
+credentialVO.getUserid());
parameters.append("
&
password="
+credentialVO.getPassword());
StringreturnFlag=null;
try{
returnFlag=sysRegiste(parameters.toString(),registryUrl);
}catch(Exceptione){
Logger.error(e,e);
thrownewPortletLoginException(e.getMessage());
}
if(returnFlag!
=null&
returnFlag.equals("
failure"
))
thrownewPortletLoginException("
BO用户验证失败,用户名或密码有误!
"
else
returnreturnFlag;
sysRegiste是个私有方法,我们提供了一种参考实现,可以直接采用。
然后根据是否验证成功返回不同的字符串来处理,如果验证不成功返回字符串”0”,以我们规定的异常抛出,这样会直接在单点登录的界面上显示提示信息,如果验证成功则返回构造好的CredentialVO。
向第三方系统认证地址发送验证信息的参考实现方法如下。
privateStringsysRegiste(Stringparameters,StringregistrUrl)throwsIOException
{
URLpreUrl=newURL(registrUrl);
URLConnectionuc=preUrl.openConnection();
//表明程序必须把名称/值对输出到服务器程序资源
uc.setDoOutput(true);
//表明只能返回有用的信息
uc.setUseCaches(false);
//设置Content-Type头部指示指定URL已编码数据的窗体MIME类型
uc.setRequestProperty("
Content-Type"
"
application/x-www-form-urlencoded"
Content-Length"
+parameters.length());
//提取连接的适当的类型
HttpURLConnectionhc=(HttpURLConnection)uc;
//把HTTP请求方法设置为POST(默认的是GET)
hc.setRequestMethod("
POST"
//输出内容
OutputStreamos=hc.getOutputStream();
DataOutputStreamdos=newDataOutputStream(os);
dos.writeBytes(parameters);
dos.flush();
dos.close();
//获取对凭证的验证结果
InputStreamis=hc.getInputStream();
StringreturnFlag="
;
intch;
while((ch=is.read())!
=-1){
returnFlag+=String.valueOf((char)ch);
}
if(is!
=null)
is.close();
returnreturnFlag;
publicExtAuthField[]getCredentialFields(HttpServletRequestreq,SSOProviderVOproviderVO,PtUserVOuserVO,PtCredentialVOcredential)throwsPortletLoginException{
由于第三方系统的登录信息不尽相同,简单的系统只需要用户名/密码,有的系统在登录时可能还需要别的信息,如公司编码等,这个方法用于指定登录时需要用户录入的第三方系统的登录信息,代码实例如下
ExtAuthField[]fields=newExtAuthField[2];
fields[0]=newTextExtAuthField("
用户名:
true);
fields[1]=newPasswordExtAuthField("
用户口令:
false);
returnfields;
这样Portal的单点登录框架会自动根据这些指定字段形成统一风格的凭证制作界面。
publicStringgetGateUrl(HttpServletRequestreq,HttpServletResponseres,
PtCredentialVOcredential,SSOProviderVOproviderVO)throws
PortletLoginException
这个方法是真正形成进入第三方系统的最终URL地址。
对于本身有htmlform表单登录的系统,在单点集成时直接利用该系统已有的登录验证逻辑,只是保证将所需的参数传给集成系统即可,代码参考实现如下:
Stringusercode=credential.getUserid();
Stringpassword=credential.getPassword();
//进行credential中的信息校验,保证信息安全
returnFlag=verifyUserInfo(req,credential,providerVO);
}catch(IOExceptione){
Logger.error(e,e);
thrownewPortletLoginException(e.getMessage());
}
0"
系统用户名或密码有误!
Map<
String,String>
formFieldMap=newHashMap<
();
formFieldMap.put("
username"
usercode);
password);
req.getSession().setAttribute("
fieldsMap"
formFieldMap);
StringfromUrl=“http:
//127.0.0.1/login.jsp”;
form_url"
fromUrl);
return"
/portal/html/portlets/application/form_view.jsp"
return的jsp是Portal系统规定的框架级jsp,必须这么写,form_url为原来第三方系统登录页面htmlform表单所指向的action地址,往formFieldMap中put进的key值,必须和第三方系统原登录表单的各个字段的key值一样。
如果第三方系统的登录不是基于htmlform表单的形式,类似NC系统,那么代码的参考实现如下:
StringgateUrl=providerVO.getGateUrl();
StringreturnFlag=verifyUserInfo(req,credential,providerVO);
StringrealUrl=gateUrl+returnFlag;
returnrealUrl;
这样只需最终返回进入系统的url即可。
1.3.2Porlet的配置说明
单点集成类型的portlet都需要在portlet.xml进行说明,具体的配置如下:
<
portlet>
<
description>
SYSPortlet<
/description>
portlet-name>
SysPortlet<
/portlet-name>
display-name>
SYS<
/display-name>
init-param>
<
name>
jsp_prefix<
/name>
value>
/value>
/init-param>
view-jsp<
application_view.jsp<
edit-jsp<
//pageId的值和<
的值一样
/application/lfwcredential.jsp?
pageId=SysPortlet
system_code<
<
//必须和sso-prop.xml中<
system-code>
值一样
decorator<
false<
portlet-class>
nc.bs.portlet.WebApplicationPortlet
/portlet-class>
//Portlet全类名
expiration-cache>
0<
/expiration-cache>
supports>
mime-type>
text/html<
/mime-type>
portlet-mode>
view<
/portlet-mode>
edit<
/supports>
supported-locale>
EN<
/supported-locale>
resource-bundle>
nc.bs.portlet.SpringResourceBundle
/resource-bundle>
portlet-info>
title>
/title>
short-title>
/short-title>
keywords>
/keywords>
/portlet-info>
portlet-preferences>
/portlet-preferences>
<
/portlet>
1.3.3SSO的配置说明
sso-prop.xml中需要是对单点登录系统的描述,指明该系统的单点认证类,登录信息验证地址,登录系统的URL,和系统需要的特定默认配置项等。
这些配置会在portal启动时自动解析形成SSOProviderVO类,从该类中可以获取系统配置的各个单点信息。
一般的配置如下:
provider>
/system-code>
system-name>
/system-name>
enable-mapping>
/enable-mapping>
provider-references>
reference>
registryUrl<
http:
//127.0.0.1/verify.jsp<
/reference>
/provider-references>
auth-class>
nc.portlet.thirdintegration.Sys1Login<
/auth-class>
gate-url>
//127.0.0.1/login.jsp<
/gate-url>
nodes-class>
nc.impl.portal.service.SYSNodesProvider
/nodes-class>
/provider>
registryUrl为第三方提供的认证jsp地址,<
为实现了单点认证接口的实现类,<
为进入第三方系统的URL,该URL并非是进入系统的最终URL,该URL还可以在getGateUrl()方法中进一步加工,nodes-class为集成系统节点默认提供类,<
可以有多个,为该系统设置的一些初始信息。
1.3.4认证地址registryUrl的说明
registryUrl是第三方系统提供的对用户登录信息认证的地址,应由第三方系统提供,因为一般的第三方系统肯定都有用户信息验证的方法,所以该文件的实现不需要太多的代码,为了统一,Portal系统建议,第三方系统由于验证不通过返回给认证类的结果为字符串”0”。
这里给出某系统提供的认证代码(bovalidate.jsp)作为实现参考。
%@pageimport="
com.crystaldecisions.sdk.occa.infostore.*,
mon.*,
com.crystaldecisions.sdk.framework.*,
com.crystaldecisions.sdk.occa.security.*,
com.crystaldecisions.sdk.exception.SDKException,
com.crystaldecisions.sdk.occa.managedreports.IReportSourceFactory,
java.util.Locale,
com.crystaldecisions.report.web.viewer.CrystalReportVie
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- V56 Portal单点登录及系统集成红皮书 Portal 单点 登录 系统集成 红皮书