To English readers: This is a translation of an earlier post, for Chinese audience.
发布于2009年4月1日
Brenda Yin 翻译于2009年6月24日
最近利用了一些时间搭建了一个WebCenter Interaction (WCI) 单点登录的环境。
下面是环境配置信息:
操作系统:Windows 2003 Server
安装的软件:
WebCenter Interaction 10.3
Oracle WebLogic Server 10.3: 运行WCI 的应用服务器
Oracle HTTP Server (Apache 1.3): 为WCI提供HTTP Proxy
Oracle Access Manager: 提供SSO功能
Oracle Internet Directory: LDAP 认证服务器
Oracle 11g Database (11.1.0.7):WCI数据库
在搭建的过程中, 参考了官方文档,但是其中一部分文档还没有更新涉及到软件新版本上运行问题的解决办法。出现问题后, 只能在文档的基础上靠经验猜测和他人的帮助来解决。因此非常有必要记录那些问题的解决方法,以供其他人或者自己以后做参考。
在此,特别感谢以下给我提供帮助的人(按字母顺序): Clarence Cheah, Rory Douglas, Iyad Kloub, Ali Mukadam, Luke McQueen, Igor Polyakov, Tamer Qumhieh, Mike Wertzberger 和 Tanya Williams.
下面列出了一些在文档里没有涉及的重要配置步骤。
Oracle 11g Database配置问题
在本次环境中,WebCenter Interaction 10.3 使用 Oracle Database 11g作为门户数据库, 同时安装了WebCenter Identity Integration for LDAP 服务去连接Oracle Internet Directory。之后该服务的定时工作(job)运行时报出一个SQL错误,然后门户访问也失败了,而且再也无法成功启动。查看日志后,发现以下的SQL查询语句执行失败:
SELECT MAX(CS.ACCESSLEVEL) AS ACCESSLEVEL, C.NAME, C.ISLOCALIZED, C.OBJECTID, MC2.MEMBERSHIPTYPE FROM PTCOMMUNITIES C, PTCOMMSECURITY CS, PTVGROUPMEMBERSHIP GM, (SELECT MAX(MC.MEMBERSHIPTYPE) AS MEMBERSHIPTYPE, MC.COMMUNITYID FROM PTMYCOMMUNITIES MC, PTVGROUPMEMBERSHIP GM WHERE GM.GROUPID=MC.GROUPID AND GM.USERID=263 GROUP BY MC.COMMUNITYID) MC2 WHERE GM.GROUPID=CS.GROUPID AND GM.USERID=263 AND C.OBJECTID=CS.OBJECTID AND C.OBJECTID=MC2.COMMUNITYID GROUP BY C.NAME, C.ISLOCALIZED, C.OBJECTID, MC2.MEMBERSHIPTYPE ORDER BY LOWER(C.NAME) ASC
出现了这样的错误:“not a GROUP BY expression.” 。仔细检查了该查询语句没有发现问题。同样该语句在Oracle 10g database上运行成功。经过深入的研究发现是因为启用了11g的查询优化器导致了错误,通过下面的数据库设置可以禁用它:
ALTER SYSTEM SET “_OPTIMIZER_GROUP_BY_PLACEMENT”=FALSE;
在此之前我已经在数据库打了11.1.0.7 的补丁。 所以没有在11.1.0.6版本上测试过这个方法,因此不能肯定是否能解决上述问题。
WebCenter Interaction 配置
为了确保WebCenter Interaction 能和HTTP proxy 很好的工作,需要对位于<BEA_HOME>\alui\settings\portal 目录下的一些配置文件进行修改:
在 configuration.xml中, 查找SystemProperties 组件,然后指定ServerName 和 HTTPPort为你的代理服务器。请参照下面的例子:
<component name="portal:SystemProperties" type="http://www.plumtree.com/config/component/types/portal/systemproperties"> <!-- lines removed for brevity --> <setting name="ServerName"> <value xsi:type="xsd:string">proxy.server</value> </setting> <setting name="HTTPPort"> <value xsi:type="xsd:integer">8080</value> </setting> <!-- lines removed for brevity --> </component>
然后,修改portalconfig.xml 文件(目录为<BEA_HOME>\alui\settings\portal)。首先查找URLMapping 组件配置,替换 ApplicationURL0和 SecureApplicationURL0 中URL中的门户服务器为代理服务器。请参照下面的例子:假设代理服务器为proxy.server:8080。
<component name="portal:URLMapping" type="http://www.plumtree.com/config/component/types/portal/urlmapping"> <!-- URLMapping - Entry 0 --> <setting name="URLFromRequest0"> <value xsi:type="xsd:string">*</value> </setting> <setting name="ApplicationURL0"> <value xsi:type="xsd:string">http://proxy.server:8080/portal/server.pt</value> </setting> <setting name="SecureApplicationURL0"> <value xsi:type="xsd:string">http://proxy.server:8080/portal/server.pt</value> </setting> <clients> <client name="portal"/> </clients> </component>
另外一个更改发生在SSO设置部分。查找Authentication 组件,然后设置 SSOVendor 值为 3 (使用 Oracle Access Manager)和CookieDomain. 请参考下面的例子:
<component name="portal:Authentication" type="http://www.plumtree.com/config/component/types/portal/authentication"> <!-- lines removed for brevity --> <setting name="SSOVendor"> <value xsi:type="xsd:integer">3</value> </setting> <setting name="CookieDomain"> <value xsi:type="xsd:string">.server</value> </setting> <!-- lines removed for brevity --> </component>
Oracle Access Manager 配置
当你为HTTP proxy上WebGate建立Policy Domain的时候,你需要做如下设置:
• 在Resources 标签上, 增加了一个类型为http的Resource,其URL设置为/portal”.
• 在Default Rules标签上, 新建一个Default Rule,其Authentication post success action重定向到/portal/SSOServlet , 并且传递一个 名为UID的 HeaderVar ,它的值为cn。
• 确保你的策略中为类型 http选择了GET 和 POST.
总结
综上所述,这些都是保证它能正确配置和运行的关键点,是从文档中不能明确得到解决办法的,希望对大家有帮助。