[16.0.0.3 and later]

Liberty 开发定制用户存储库

要开发定制用户存储库作为用户功能部件,可以实现 Liberty 服务器中的 com.ibm.wsspi.security.wim.CustomRepository 接口。这个定制存储库接口启用了对大部分帐户存储库类型的支持。

For distributed platforms

开始之前

如果您想使用开发者工具来实现定制存储库接口,请按在开发者工具中配置定制用户存储库 SPI中的描述,配置工具以使用 SPI。

过程

  1. 创建一个实现定制存储库接口 com.ibm.wsspi.security.wim.CustomRepository 的类。 这个类提供存储库操作。有关此接口的信息,请参阅 编程接口 中的 com.ibm.websphere.appserver.spi.federatedRepository_1.0 SPI 信息,或参阅产品在 ${wlp.install.dir}/dev/spi/ibm/ 目录中随附的 Java 文档中的此信息。

    要获取实现此接口的示例,请参阅存储库接口示例

  2. 将实现类转换为 OSGi 服务。有关更多信息,请参阅向 OSGi 声明式服务声明服务
  3. 将定制用户存储库封装为 OSGi 捆绑软件并导出用户存储库服务。有关创建 OSGi 捆绑软件的更多信息,请参阅创建 OSGi 服务捆绑软件
  4. 创建功能部件清单文件以包含 OSGi 捆绑软件。有关更多信息,请参阅产品扩展
  5. 将功能部件安装到用户产品扩展位置之后,在 server.xml 配置文件中添加定制存储库功能部件。并且,请添加定制存储库所必需的 appSecurity-2.0federatedRegistry-1.0 功能部件。 例如:
    <featureManager>
    	...
    	<feature>usr:customRepositorySample-1.0</feature>
    	<feature>appSecurity-2.0</feature>
    	<feature>federatedRegistry-1.0</feature>
    </featureManager>
  6. 可选: 如果要为用户和组定义定制属性,请在 server.xml 文件中的 federatedRepository 元素中配置这些属性。
    在以下示例中,为 PersonAccount 实体定义了 myProp 属性,并为 Group 实体定义了 myGroupProp 属性。
    <federatedRepository>
       <primaryRealm name="sampleCustomRepositoryRealm">
           <participatingBaseEntry name="o=ibm,c=us"/>
       </primaryRealm>
       <extendedProperty dataType="String" name="myProp" entityType="PersonAccount"></extendedProperty>
       <extendedProperty dataType="String" name="myGroupProp" entityType="Group"></extendedProperty>
    </federatedRepository>

存储库接口示例

package com.myorg;

import java.util.Map;
import com.ibm.wsspi.security.wim.exception.WIMException;
import com.ibm.wsspi.security.wim.model.Root;
import com.ibm.wsspi.security.wim.CustomRepository;

public class MyCustomRepository implements CustomRepository {

    public CustomRepository() {
        System.out.println("In my custom repository implementation");
    }

    @Override
    public Root create(Root arg0) throws WIMException {
        System.out.println("In my create method");
        //Add your code here
    }

    @Override
    public Root delete(Root arg0) throws WIMException {
        System.out.println("In my delete method");
        //Add your code here
    }

    @Override
    public Root get(Root arg0) throws WIMException {
        System.out.println("In my get method");
        //Add your code here
    }

    @Override
    public String getRealm() {
        return "customRepository";
    }

    @Override
    public Root login(Root arg0) throws WIMException {
        System.out.println("In my login method");
        //Add your code here
    }

    @Override
    public Root search(Root arg0) throws WIMException {
        System.out.println("In my search method");
        //Add your code here
    }
 
    @Override
    public Root update(Root arg0) throws WIMException {
        System.out.println("In my update method");
        //Add your code here
    }

    @Override
    public Map<String, String> getRepositoryBaseEntries() {
        System.out.println("In my getRepositoryBaseEntries method");
        //Add your code here
    }

    @Override
    public String[] getRepositoriesForGroups() {
        System.out.println("In my getRepositoriesForGroups method");
        //Add your code here
    }
}

用于指示主题类型的图标 任务主题

文件名:twlp_sec_cust_repository.html