使用联合存储库管理权限的样本代码
此处提供的端到端步骤、命令和样本代码片段,是使非 WebSphere Application Server 管理员用户能够在多个安全域环境中访问虚拟成员管理器应用程序编程接口 (API) 所必需的。
通过联合存储库管理权限,非 WebSphere Application Server 管理员用户也能管理用户和组以及访问管理域和应用程序域中的其他虚拟成员管理器API。 请参阅虚拟成员管理器文档中的 提供安全性 主题中的预定义角色及其许可权。 您可以使用以下 wsadmin 命令来实现此功能:mapIdMgrUserToRole、mapIdMgrGroupToRole、removeIdMgrUsersFromRole、removeIdMgrGroupsFromRole 和 listIdMgrUsersForRoles。 如需了解更多信息,请阅读 WebSphere Application Server AdminTaskIdMgrConfig 命令组主题,了解如何使用这些命令
此样本场景中包含以下步骤:
- 在作用域限定为安全域的服务器上安装 wimperdomain 应用程序。 在多安全域环境中,必须在每个目标服务器上部署虚拟成员管理器EJB,其中服务器作用域与此安全域关联,以获取此域中虚拟成员管理器实例的引用。 通过此过程,可为特定域通过 EJB 调用虚拟成员管理器API。 只有此域中具有虚拟成员管理器API 或超级用户的所需访问角色的用户才可调用各个 API。
- 在对应于安全域的用户注册表中创建用户。 您必须作为 WebSphere Application Server 管理员进行登录。
- 将该用户分配到虚拟成员管理器角色。 有效的预定义虚拟成员管理器角色为 IdMgrAdmin、IdMgrWriter 和 IdMgrReader。
- 通过 EJB 查询,访问对应于安全域的虚拟成员管理器实例。 在网络部署环境中,必须首先使用上下文的绝对路径(例如 cell/nodes/myNode/servers/server1/ejbna,其中 ejbna 为受管服务器 server1 上的虚拟成员管理器EJB 的 JNID 名称),来查找受管服务器节点上的 EJB。
- 作为被分配了虚拟成员管理器角色的用户,在与安全域相对应的虚拟成员管理器实例上执行操作。
先决条件
确保您已阅读信息并完成主题 编程先决条件中描述的步骤。
您必须首先完成以下配置步骤,然后才能使用样本代码。 启动 wsadmin 工具并执行以下命令。 将变量替换为您要使用的实际值。
- 在作用域限定为安全域的服务器上安装 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 ]]]' )
- 在对应于安全域 domain1 的用户注册表中创建用户 vmmadmin。 您必须作为 WebSphere Application Server 管理员进行登录。
$AdminTask createUser {-uid vmmadmin -password tempPass -confirmPassword tempPass -cn admincn -sn adminsn -securityDomainName domain1 }
- 将虚拟成员管理器角色 IdMgrAdmin 分配给与安全域 domain1 相对应的用户注册表中的用户 vmmadmin。
$AdminTask mapIdMgrUserToRole {-userId vmmadmin -roleName IdMgrAdmin -securityDomainName domain1}
样本代码
按照以下步骤所述,将以下端到端样本代码添加到您的应用程序代码。 将变量替换为您要使用的实际值。
- 通过 EJB 查询,访问对应于安全域 domain1 的虚拟成员管理器实例。 EJB JNDI 与先前在“先决条件”部分中步骤 1 中使用的 EJB JNDI 相同。
- 作为用户 vmmadmin(在“先决条件”部分的步骤 3 中为该用户分配了虚拟成员管理器角色),在 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(); } }