使用联合存储库管理权限的样本代码

此处提供的端到端步骤、命令和样本代码片段,是使非 WebSphere Application Server 管理员用户能够在多个安全域环境中访问 virtual member manager 应用程序编程接口 (API) 所必需的。

通过联合存储库管理权限,非 WebSphere Application Server 管理员用户也能管理用户和组以及访问管理域和应用程序域中的其他 virtual member manager API。请阅读 virtual member manager 文档中“提供安全性”主题下有关预定义角色及其许可权的内容。您可以使用以下 wsadmin 命令来实现此功能:mapIdMgrUserToRole、mapIdMgrGroupToRole、removeIdMgrUsersFromRole、removeIdMgrGroupsFromRole 和 listIdMgrUsersForRoles。 有关更多信息,请阅读 WebSphere Application Server 信息中心“用于 AdminTask 对象的 IdMgrConfig 命令组”主题中有关使用这些命令的内容

此样本方案中涵盖以下步骤:

  1. 在作用域限定为安全域的服务器上安装 wimperdomain 应用程序。在多安全域环境中,必须在每个目标服务器上部署 virtual member manager EJB,其中服务器作用域与此安全域关联,以获取此域中 virtual member manager 实例的引用。通过此过程,可为特定域通过 EJB 调用 virtual member manager API。只有此域中具有 virtual member manager API 或超级用户的所需访问角色的用户才可调用各个 API。
  2. 在对应于安全域的用户注册表中创建用户。 您必须作为 WebSphere Application Server 管理员进行登录。
  3. 将该用户分配到 virtual member manager 角色。有效的预定义 virtual member manager 角色为 IdMgrAdmin、IdMgrWriter 和 IdMgrReader。
  4. 通过 EJB 查询,访问对应于安全域的 virtual member manager 实例。在网络部署环境中,必须首先使用上下文的绝对路径(例如 cell/nodes/myNode/servers/server1/ejbna,其中 ejbna 为受管服务器 server1 上的 virtual member manager EJB 的 JNID 名称),来查找受管服务器节点上的 EJB。
  5. 作为被分配了 virtual member manager 角色的用户,在与安全域相对应的 virtual member manager 实例上执行操作。

必备条件

确保您已阅读了“编程先决条件”主题中的信息并完成了其中描述的步骤。

您必须首先完成以下配置步骤,然后才能使用样本代码。启动 wsadmin 工具并执行以下命令。将变量替换为您要使用的实际值。

  1. 在作用域限定为安全域的服务器上安装 wimperdomain 应用程序。wimperdomain.ear 应用程序位于 app_server_root/installableApps/ 目录下。 在域的特定目标服务器上部署 wimperdomain.ear 应用程序。必须为 EJB 指定唯一 JNDI URL。
    $AdminApp.install('app_server_root/installableApps/wimperdomain.ear', 
    '[-appname wimperdomain -BindJndiForEJBNonMessageBinding [[ wim.ejb 
    WIMService wimejb.jar,META-INF/ejb-jar.xml ejbd2/com/ibm/websphere/wim/ejb/WIMServiceHome]] 
    -MapModulesToServers [[ wim.ejb wimejb.jar,META-INF/ejb-jar.xml 
    WebSphere:cell=myCell,node=myNode,server=server1 ]]]' )
  2. 在对应于安全域 domain1 的用户注册表中创建用户 vmmadmin。 您必须作为 WebSphere Application Server 管理员进行登录。
    $AdminTask createUser {-uid vmmadmin –password tempPass -confirmPassword tempPass 
    –cn admincn –sn adminsn -securityDomainName domain1 }
  3. 将 virtual member manager 角色 IdMgrAdmin 分配给与安全域 domain1 相对应的用户注册表中的用户 vmmadmin
    $AdminTask mapIdMgrUserToRole {-userId vmmadmin -roleName IdMgrAdmin -securityDomainName domain1}

样本代码

按照以下步骤所述,将以下端到端样本代码添加到您的应用程序代码。将变量替换为您要使用的实际值。

  1. 通过 EJB 查询,访问对应于安全域 domain1 的 virtual member manager 实例。EJB JNDI 与先前在“先决条件”部分中步骤 1 中使用的 EJB JNDI 相同。
  2. 作为用户 vmmadmin(在“先决条件”部分的步骤 3 中为该用户分配了 virtual member manager 角色),在 domain1 中创建一个用户。
    import commonj.sdo.DataObject;
    
    public class SimpleTest extends BaseApp
    {
        public static void createAsAdmin()
        {
            try {
                createUser("vmmadmin", "tempPass");
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        } 
    
        public static void createUser(String user, String password) throws Exception
        {
            DataObject result = (DataObject) runAsUser(user, password, new java.security.PrivilegedExceptionAction()
            {
                public Object run() throws Exception
                {
                    //Note the service instance used is that of security domain obtained in step 1.
                    DataObject root = service.createRootDataObject();
                    DataObject user = root.createDataObject(DO_ENTITIES, WIM_NS_URI, DO_PERSON_ACCOUNT);
                    user.set("uid", "authzzuser");
                    user.set("cn", "authzzuser");
                    user.set("sn", "authzzuser");
                    user.set(PROP_PASSWORD, com.ibm.websphere.wim.util.PasswordUtil
                            .getByteArrayPassword("authzzuser"));
                    // Print Input datagraph
                    System.out.println("Input datagraph before creating user" + printDO(root));
                    DataObject retObject = service.create(root);
                    // Print the output datagraph
                    System.out.println("Output datagraph after creating user" + printDO(retObject));
                    return retObject;
                }
            });
        }
    
        public static void main(String[] args)
        {
            // Note that the EJB JNDI is same as one used in step 1.
            service = locateService("ejbd2/com/ibm/websphere/wim/ejb/WIMServiceHome");
            createAsAdmin();
            
        }
    }


使用条款 | 反馈