IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope:Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Information Management  >

利用WebSphere Member Manager定制Portal用户管理

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

尉霁 施, IBM中国软件开发中心上海全球化实验室, IBM

2005 年 11 月 07 日

WebSphere Member Manager是WebSphere Portal Server提供的一个组件,它负责管理WebSphere Portal Server的用户成员信息。不论用户成员信息是储存在LDAP或者是数据库中,WMM提供了一种公共的访问机制来处理成员相关的信息。采用WMM,用户可以为每个成员定义属性,或者添加、删除和修改成员的信息。用户还可以为成员分配用户组。采用WMM API,用户可以轻松实现对Portal成员的管理。

介绍

WebSphere Portal Server提供了多种用户认证管理机制。用户信息可以采用LDAP进行管理,也可以采用数据库进行管理。要在不同的用户信息管理机制之上实现用户管理,需要对不同的用户管理机制有比较全面的了解。

WebSphere Portal Server自带的WebSphere Member Manager为用户提供了一个较好的解决这个问题的途径。WMM可以根据用户配置的不同,采用不同的机制访问底层成员信息,而为应用程序提供统一的程序接口。当成员信息的存储方式发生变化时,只需要修改相应的配置文件就可以实现成员信息的移植,而不需要修改程序源文件。这就大大简化了Portal上实现用户管理的工作,当应用中需要定制自己的成员管理时,采用WMM将会为应用的开发维护节约大量时间。

WMM提供了大量的成员操作方法。通过调用WMM编程接口,可以实现几乎全部的成员管理任务。WMM提供的成员管理操作主要包括:

1. 成员档案管理。包括添加成员、编辑和删除成员档案、修改成员层次结构、成员档案查询等等。

2. 成员属性管理。包括系统中各类成员的属性的创建、修改和删除。

3. 成员组管理。包括向组添加成员、删除组成员、组成员列表等等。

在本文中,将对如下内容进行讨论:

1. 如何根据使用LDAP和数据库的不同对WMM进行配置;

2. 如何把用户界面输入映射到WMM中的成员属性;

3. WMM API介绍,以及一些示例。





回页首


配置WMM

在WebSphere Portal Server上,WMM可以使用数据库或者LDAP作为成员管理机制。对于这2种不同的机制,需要进行不同的配置。

1. 配置WMM使用数据库

要配置WMM使用数据库,首先要在WAS(WebSphere Application Server)中建立正确的JDBC提供程序和数据源。

1. 启动WAS,登录到WAS的控制台,选择资源->JDBC 提供程序。

2. 如果已经有JDBC提供程序可用,那么可以不用新建JDBC提供程序,直接执行第5步。否则就需要新建一个JDBC提供程序。点击新建按钮。

3. 选择一个JDBC提供程序类型,并点击确定。对于不同类型的数据库,需要选择不同的JDBC提供程序类型,例如对于DB2数据库,应该选择DB2 Legacy CLI-based Type 2 JDBC Driver。

4. 在提供程序配置面板中,你需要指定JDBC提供程序的类路径。例如,对于DB2数据库,类路径可以按照图一所示。设置完类路径以后点击确定。


图一 类路径示例
图一 类路径示例

5. 当建立完JDBC提供程序以后,就可以为它配置数据源了。点击该提供程序的其他属性里的数据源一项。

6. 在数据源面板里,点击新建。名称一栏填写wmmDS,JNDI名填写jdbc/wmmDS。然后点击应用。

7. 如果你的数据库需要认证(采用Cloudscape数据库是不需要认证的),那么就需要建立一个J2C认证数据条目。在相关项中点击J2C认证数据条目。

8. 点击新建,建立一个新的数据库别名。在新建面板里,填写需要的别名,其中用户标识和密码是数据库用户名和密码。


图二 数据库别名示例
图二 数据库别名示例

9. 点击确定,返回wmmDS配置面板,在容器受管的认证别名中选择你新建的数据库别名。然后点击应用。

10. 对于不同的数据库,用户需要添加不同的自定义属性。在wmmDS面板中,点击其他属性中的定制属性。对于DB2数据库,需要将databaseName属性值设置为wmm。

11. 保存所有设置。然后进入数据源面板,选择wmmDS并点击测试连接。如果连接测试成功,那么就可以进入下一步配置XML文件了。

一般情况下,Portal Server安装完成以后,WMM的配置文件会被放置在<WP_ROOT>/wmm目录下。其中wmm.xml文件是WMM的主要配置文件,记录了大部分WMM系统配置。如果采用数据库作为WMM的成员管理机制,可以参照模板文件wmm_DB.xml对wmm.xml进行修改。

打开wmm.xml文件,可以看到WMM的所有配置都在元素wmm下。采用数据库作为WMM成员管理机制时,需要在<repositories>元素下面配置唯一的一个databaseRepository元素。这个databaseRepository元素中指定了使用的数据源、数据库类型等等。用户可以根据模板文件,结合数据库设置的实际情况,对databaseRepository中的属性进行修改。当wmm.xml正确配置以后,需要将WMM配置的一些信息更新到系统环境变量中。

进入WAS控制台,选择服务器->应用程序服务器,选择安装了WMM的服务器,例如WebSphere_Portal。在其他属性里选择进程定义;然后在其他属性里选择Java虚拟机;在其他属性里选择定制属性,新建一个属性,名称为com.ibm.websphere.wmm.configfile,值为wmm.xml。返回Java虚拟机设置面板,在类路径中添加上WMM的安装路径。保存所有设置并重新启动服务器。

到这里,配置WMM使用数据库全部完成,此时Portal上的用户信息,就是在数据库中进行存贮的。

2. 配置WMM使用LDAP

如果使用LDAP作为WMM的成员管理机制,那么就不需要配置数据源了。用户可以参照模板文件wmm_LDAP.xml来对wmm.xml文件进行修改,配置WMM使用LDAP。

采用LDAP作为WMM成员管理机制时,需要在<repositories>元素下面配置唯一的一个ldapRepository元素。在ldapRepository元素当中,需要指定LDAP服务器的主机名,端口,用户名,密码等等信息。另外,还需要将LDAP服务器上配置的节点名称与WMM上的节点名称做一个映射。请根据LDAP中节点的配置信息,参照模板文件,更新元素ldapRepository的属性和元素nodeMaps中的内容。

更新完wmm.xml文件以后,和配置WMM使用数据库一样,需要更新系统环境变量。请参考配置WMM使用数据库中的步骤,配置configfile变量和类路径。

到这里,配置WMM使用LDAP完成,Portal上的用户信息将被放置到用户定义的LDAP服务器上。





回页首


定制Portal用户注册

WebSphere Portal Server的用户管理机制是基于WMM实现的,当一个新用户向Portal提交用户注册信息的时候,Portal会通过WMM的配置信息,将用户的输入数据和用户管理机制中的数据结构进行对应,将用户信息储存到数据库或者LDAP中。我们可以通过修改WMM配置文件的方式,实现对Portal用户注册的定制。

WebSphere Portal Server提供了两种方式实现用户注册:Portlet方式和Screen方式。不管采用哪一种方式,Portal服务器均采用一个JSP文件作为用户注册或者编辑用户信息时用户属性的输入文件。当用户采用Portlet方式实现用户注册时,该JSP位于Portal服务器的已安装应用目录下面的Selfcare应用程序中。JSP文件的名字是UserInformationFormInclude.jsp。当用户采用Screen方式实现用户注册时,该JSP位于<WAS_ROOT>/installedApps/<cell>/wps.ear/wps.war/screens/<markup>/UserProfileForm.jsp。当用户需要定制用户注册或者用户信息修改页面时,只需要修改对应的JSP文件就可以了。

用户信息JSP中包含一些默认的用户输入信息。当需要为一个用户信息添加新的属性的时候,只需要在该JSP中添加一个文本输入框,并对系统做相应的配置就可以了。下面我们将通过一个例子来说明自定义用户注册信息的过程。

在我们的Portal服务器上,当用户注册时,我们希望用户填写"生日"信息。首先,我们需要修改JSP文件,添加如下代码:


<tr>
<td>*</td>
<td class="wpsEditText">
生日
</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>
<input class="wpsEditField" type="text" id="wps.birthday" name="wps.birthday">
</td>
<td>&nbsp; </td>
</tr>

注意到在我们新添加的文本框中,使用了wps.birthday这样的名称。下面我们需要修改WMM的配置文件,使得属性birthday可以和数据库或者LDAP中的定义对应起来。该配置文件是一个XML文件,在wmm.xml文件中通过属性configurationFile来指定,通常这个文件位于WMM的安装目录下面。默认的文件名为wmmAttributes.xml。编辑wmmAttributes.xml,添加以下元素:


<attributeMap         wmmAttributeName="birthday" 
                        applicableMemberTypes="Person "
                        pluginAttributeName="birthday" 
                        multiValued="false"
                        dataType="String"
                        valueLength="255" />

其中各个属性的说明见表格。

表一 attributeMap元素属性说明

wmmAttributeNameWMM属性名。该属性值需要和数据框的名称wps.birthday中.以后的部分完全一样。WMM会通过该属性来对应JSP中的输入参数。
applicableMemberTypes适用的成员类型。成员类型也是在wmm.xml中定义的,默认情况下为下面4个值之一:Person、Group、Organization、OrganizationUnit
pluginAttributeName对应的LDAP属性。该属性需要事先由LDAP管理员在LDAP中建立。当使用数据库作为WMM管理机制时,该属性不需要添加。
multiValued是否可以有多个值。
dataType数据类型。可以是String,DateTime等等。
valueLength数据长度。

如果是采用LDAP作为WMM的成员管理机制,那么需要由系统管理员在LDAP中为用户成员添加好对应的属性,存放生日信息。该成员属性由pluginAttributeName指定。如果是采用数据库作为WMM的成员管理机制,那么就不需要指定pluginAttributeName,系统将会自动在数据库中建立生日对应的数据库项,存储用户信息。

修改完wmmAttributes.xml文件以后,保存所有设置并重新启动服务器,在Portal用户注册界面就可以填写用户生日信息,并可以在编辑用户信息时修改它了。





回页首


WMM API介绍

WMM除了通过一系列配置文件让用户进行定制以外,还提供了丰富的编程接口,让用户可以建立自己的应用程序来管理Portal的用户信息。

通过WMM的API编程接口,可以实现几乎全部的用户管理工作。用户管理工作可以分为几类:

1. 成员档案管理。这类管理任务主要包括了成员档案的创建、修改、删除,在树状组织结构上移动成员,成员档案的查找和获取等等。

2. 档案属性管理。这类管理任务主要包括为某一类成员档案添加新的属性,成员档案属性获取等等。

3. 组成员管理。这类管理任务主要包括将某一成员添加到一个用户组,或者从用户组删除成员,列举用户组的所有成员等等。

用户可以通过调用WMM的API,创建自己的应用程序,实现上述所有功能。WMM的API通过JAR包wmm.jar提供,其中包含了以下包:

com.ibm.websphere.wmm
这个包中包含了MemberService这个WMM的主要类,所有成员操作几乎都是通过MemberService这个接口实现的。

com.ibm.websphere.wmm.objects
这个包中包含了WMM的EJB的home和remote接口。

com.ibm.websphere.wmm.datatype
这个包中包含了WMM API中使用的数据类型定义。

com.ibm.websphere.wmm.exception
这个包中包含了WMM API里产生的异常定义。

com.ibm.websphere.wmm.adapter
这个包中包含了一个接口MemberRepository,通过这个接口用户可以开发自己存贮适配器,使WMM能够使用LDAP或者数据库以外的机制,来管理成员信息。

com.ibm.websphere.wmm.adapter.datatype
这个包中包含了自定义适配器中需要使用的数据类型的接口。

WMM通过EJB提供成员管理功能,因此当用户需要使用WMM的成员管理功能时,需要首先连接到服务器的EJB接口。下面的工具类WMMConnectioManager展示了如何连接到WMM EJB。通过调用WMMConnectionManager.connect(),返回一个连接对象,其余的应用程序就可以通过这个连接对象来使用WMM的功能。


package com.ibm.sgl.oged.wmm.connection;
import java.rmi.RemoteException;
import java.util.Hashtable;
import javax.ejb.CreateException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import com.ibm.websphere.wmm.MemberService;
import com.ibm.websphere.wmm.objects.MemberServiceHome;
public class WMMConnectionManager {
    /**
     * EJB name
     */
    private static final String EJB_NAME = "ejb/MemberServiceHome";
    /**
     * URL
     */
    private static final String providerURL = "corbaloc:iiop:localhost:2810";
    /**
     * Context
     */
    private static Context _ctx = null;
    /**
     * Member service
     */
    private static MemberServiceHome _msHome = null;
    /**
     * 
     * Constructor for WMMConnectionManager.
     *  
     */
    private WMMConnectionManager () {
        super();
    }
    /**
     * Connect to WMM
     * 
     * @return the MemberService object
     * @throws NamingException
     * @throws RemoteException
     * @throws CreateException
     */
    public static MemberService connect () throws NamingException,
            RemoteException, CreateException {
        if (null == _msHome) {
            initializeEJBConnection();
        }
        return _msHome.create();
    }
    /**
     * Initialize parameters
     * 
     * @concurrency
     * @throws NamingException
     * @throws RemoteException
     */
    private static synchronized void initializeEJBConnection ()
            throws NamingException, RemoteException {
        if (null == _msHome) {
            System.setProperty("java.naming.provider.url", providerURL);
            Hashtable properties = new Hashtable();
            _ctx = new InitialContext(properties);
            _msHome = (MemberServiceHome) _ctx.lookup(EJB_NAME);
        }
    }
}

由connect方法返回的MemberService接口,提供了对WMM成员操作的各种方法,例如可以调用MemberService.createMember()来创建新成员,调用MemberService.updateMember()来更新成员信息,调用MemberService.removeMember()来删除成员等等。下面的例子说明了如何利用WMM API添加一个新成员。


        Member newMember = MemberFactory
.getInstance(Member.MEMBER_TYPE_PERSON);  //该成员是一个用户,//而不是一个用户组
        Attribute attr1 = AttributeFactory.getInstance("givenName");
        attr1.addValue("personName");
        newMember.addAttribute(attr1);
        Attribute attr2 = AttributeFactory.getInstance("cn");
        attr2.addValue("Person1");
        newMember.addAttribute(attr2);
        Attribute attr3 = AttributeFactory.getInstance("ibm-primaryEmail");
        attr3.addValue("Person1@ibm.com");
        newMember.addAttribute(attr3);
        Attribute attr4 = AttributeFactory.getInstance("preferredLanguage");
        attr4.addValue("cn");
        newMember.addAttribute(attr4);
        Attribute attr5 = AttributeFactory.getInstance("uid");
        attr5.addValue("Person1");
        newMember.addAttribute(attr5);
        Attribute attr6 = AttributeFactory.getInstance("sn");
        attr6.addValue("Person1");
        newMember.addAttribute(attr6);
        Attribute attr7 = AttributeFactory.getInstance("userPassword");
        attr7.addValue("password");
        newMember.addAttribute(attr7);
        MemberService ms = WMMConnectionManager.connect();
        MemberIdentifier mi = ms.createMember(newMember);
        

下面的例子说明了如何把上面建的用户Person1分配到用户组Group1。


        MemberIdentifier groupID = MemberIdentifierFactory.getInstance(
                    "cn=Group1,o=Default Organization", null);
        ms.assignMemberToGroup(groupID, mi);
        

有关WMM其他用户管理功能的API接口,请参照WMM API的相关文档。





回页首


结论

WebSphere Member Manager提供了一种统一的机制,实现了用户管理。不论底层的存储是采用LDAP还是数据库,用户都可以使用WMM的统一编程接口,实现自定义的Portal用户管理。用户可以编写自己的Portal应用程序,代替Portal服务器提供的用户注册、用户信息编辑等功能。



参考资料



关于作者

作者施尉霁来自IBM中国软件开发中心上海全球化实验室。他的工作是研究开发IBM全球化的e-Business解决方案。




对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

建议?







回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款