Código de amostra para trabalhar com usuários, grupos, membros de grupos e associações a grupos

Use o código de amostra de ponta a ponta e os gráficos de dados para operações básicas envolvendo usuários, grupos, membros de grupos e associações a grupos.

As etapas a seguir são cobertas neste cenário de amostra:

  1. Crie um usuário incluindo uma entidade do tipo PersonAccount usando o método create.
  2. Crie um grupo incluindo uma entidade do tipo Group usando o método create.
  3. Inclua o usuário no grupo usando o método update.
  4. Obtenha os membros do grupo usando o método get e GroupMemberControl.
  5. Obtenha os grupos aos quais o usuário pertence (associação ao grupo) usando o método get e GroupMembershipControl.
  6. Remova o usuário do grupo usando o método update e GroupMemberControl. Para obter o código de amostra para remover o usuário de um grupo usando o GroupMembershipControl, consulte o tópico Código de amostra para remover usuários de um grupo.
  7. Exclua o usuário usando o método delete.
  8. Exclua o grupo usando o método delete.

Pré-requisito

Assegure-se de ter lido as informações e concluído as etapas descritas no tópico Pré-requisitos de Programação.

Código de Amostra

Inclua o seguinte código de amostra de ponta a ponta no código do aplicativo e substitua as variáveis pelos valores reais que você deseja usar.

public class UserAndGroupSample extends BaseApp
{
    // Definir DNs de usuários e grupos
    private static String user1Dn = "uid=user1,o=defaultWIMFileBasedRealm";
    private static String user2Dn = "uid=user2,o=defaultWIMFileBasedRealm";
    private static String group1Dn = "cn=group1,o=defaultWIMFileBasedRealm";
    private static String group2Dn = "cn=group2,o=defaultWIMFileBasedRealm";
    private static String EJB_JNDI_NAME = "ejb/com/ibm/websphere/wim/ejb/WIMServiceHome";

    /** 
     *  Esta amostra executa as seguintes operações:
     *  Cria um usuário 
     *  Cria um grupo
     *  Designa o usuário ao grupo
     *  Obtém os membros do grupo
     *  Obtém a associação ao grupo
     *  Remove o usuário do grupo
     *  Exclui um usuário
     *  Exclui um grupo
     */
    public static void main(String[] args) throws Exception  {
        // Inicializar o serviço de perfil
        locateService(EJB_JNDI_NAME);
        // Criar um usuário e um grupo respectivamente
        addPersonAccount("user1","user1cn","user1sn");
        addGroup("group1");
        // Incluir o membro user1 no grupo
        addMemberToGroup(user1Dn,group1Dn);
        // Obter os membros do grupo
        getGroupMembers(group1Dn);
        // Obter a associação ao grupo
        getGroupMembership(user1Dn);
        // Remover o membro user1 do grupo
        removeMemberFromGroup(user1Dn,group1Dn);
        // Excluir o user1
        deleteEntity(user1Dn);
        // Excluir o group1
        deleteEntity(group1Dn);
    }
	
    /** 
     *  addPersonAccount 
     *  Inclui uma entidade do tipo PersonAccount
     *  @param uid valor a ser configurado
     *  @param cn valor a ser configurado
     *  @param sn valor a ser configurado
     */
    public static void addPersonAccount(String uid, String cn, String sn)
    {
        try
        {
            DataObject root = SDOHelper.createRootDataObject();
            DataObject entity = SDOHelper.createEntityDataObject(root, null, 
                    SchemaConstants.DO_PERSON_ACCOUNT);
            // Configurar as propriedades da pessoa
            entity.set("uid", uid);
            entity.set("cn", cn);
            entity.set("sn", sn);
            System.out.println("Gráfico de dados de entrada antes de criar o usuário"+ printDO(root));
            // Criar a entidade PersonAccount
            root = service.create(root);
            System.out.println("Gráfico de dados de saída depois de criar o usuário"+ printDO(root));
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    
    /**
     *  addGroup Inclui uma entidade do tipo Group
     *  @param cn valor a ser configurado
     */
    public static void addGroup(String cn)
    {
        try
        {
            DataObject root = SDOHelper.createRootDataObject();
            DataObject entity = SDOHelper.createEntityDataObject(root, null, SchemaConstants.DO_GROUP);
            // Configurar o cn do grupo
            entity.set("cn", cn);
            System.out.println("Gráfico de dados de entrada antes de criar o grupo"+ printDO(root));
            // Criar a entidade group
            root = service.create(root);
            System.out.println("Gráfico de dados de saída depois de criar o grupo"+ printDO(root));
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }

    /**
     *  addMemberToGroup inclui um usuário no grupo	
     *  @param memberDn uniqueName do membro
     *  @param groupDn uniqueName do grupo
     */
    public static void addMemberToGroup(String memberDn, String groupDn)
    {
        try
        {
            DataObject root = SDOHelper.createRootDataObject();
            DataObject entity = SDOHelper.createEntityDataObject(root, null, SchemaConstants.DO_GROUP);
            // Configurar o uniqueName do grupo
            entity.createDataObject(SchemaConstants.DO_IDENTIFIER).set(SchemaConstants.PROP_UNIQUE_NAME,
                    groupDn);
            DataObject member1 = SDOHelper.createDataObject(SchemaConstants.WIM_NS_URI, 
                    SchemaConstants.DO_ENTITY);
            // Configurar o uniqueName do membro
            member1.createDataObject(SchemaConstants.DO_IDENTIFIER).setString(SchemaConstants.PROP_UNIQUE_NAME,
                    memberDn);
            // Incluir o membro no grupo
            entity.getList(SchemaConstants.DO_MEMBERS).add(member1);
            System.out.println("Gráfico de dados de entrada antes de incluir membro no grupo"+ printDO(root));
            // Atualizar o grupo
            root = service.update(root);
            System.out.println("Gráfico de dados de saída depois de incluir membro no grupo"+ printDO(root));
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    
    /**
     *  getGroupMembers Retorna os membros do grupo
     *  @param groupDn uniqueName do grupo 
     */
    public static void getGroupMembers(String groupDn)
    {
        try
        {
            DataObject root = SDOHelper.createRootDataObject();
            DataObject entity = SDOHelper.createEntityDataObject(root, null, SchemaConstants.DO_GROUP);
            // Configurar o uniqueName do grupo
            entity.createDataObject(SchemaConstants.DO_IDENTIFIER).set(SchemaConstants.PROP_UNIQUE_NAME,
                    groupDn);
            // Configurar o controle de propriedade
            DataObject propCtrl = SDOHelper.createControlDataObject(root, null, 
                    SchemaConstants.DO_PROPERTY_CONTROL);
            //Recuperar o cn do grupo cujos membros precisam ser procurados
            propCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("cn");
            // Configurar o controle de membro do grupo
            DataObject grpMbrCtrl = SDOHelper.createControlDataObject(root, null, 
                    SchemaConstants.DO_GROUP_MEMBER_CONTROL); 
            // Recuperar os atributos cn e uid para todos os membros
            grpMbrCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("cn");
            grpMbrCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("uid");
            System.out.println("Gráfico de dados de entrada antes de obter membros do grupo"+ printDO(root));
            // Obter os membros do grupo
            root = service.get(root);
            System.out.println("Gráfico de dados de saída depois de obter membros do grupo"+ printDO(root));
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }

    /**
     *  getGroupMembership Obtém os grupos aos quais o usuário pertence
     *  @param memberDn uniqueName do usuário
     */
    public static void getGroupMembership(String memberDn)
    {
        try
        {
            DataObject root = SDOHelper.createRootDataObject();
            DataObject entity = SDOHelper.createEntityDataObject(root, null, 
                    SchemaConstants.DO_PERSON_ACCOUNT);
            // Configurar o uniqueName do grupo
            entity.createDataObject(SchemaConstants.DO_IDENTIFIER).setString(SchemaConstants.PROP_UNIQUE_NAME, 
                    memberDn);
            // Configurar o controle de associação ao Grupo
            DataObject grpMbrshipCtrl = SDOHelper.createControlDataObject(root, null, 
                    SchemaConstants.DO_GROUP_MEMBERSHIP_CONTROL);
            // Configurar a propriedade de nível para recuperar todas as entidades aninhadas
            grpMbrshipCtrl.setInt(SchemaConstants.PROP_LEVEL, SchemaConstants.PROP_LEVEL_NESTED);
            // Recuperar o atributo cn para todos os grupos
            grpMbrshipCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("cn");
            System.out.println("Gráfico de dados de entrada antes de obter associação ao grupo do usuário"+ printDO(root));
            // Obter os membros do grupo
            root = service.get(root);
            System.out.println("Gráfico de dados de saída depois de obter associação ao grupo do usuário"+ printDO(root));
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    
    /**
     *  removeMemberFromGroup remover o usuário do grupo
     *  @param memberDn uniqueName do usuário
     *  @param groupDn uniqueName do grupo
     */
    public static void removeMemberFromGroup(String memberDn, String groupDn)
    {
        try
        {
            DataObject root = SDOHelper.createRootDataObject();
            DataObject entity = SDOHelper.createEntityDataObject(root, null, SchemaConstants.DO_GROUP);
            // Configurar o uniqueName do grupo
            entity.createDataObject(SchemaConstants.DO_IDENTIFIER).set(SchemaConstants.PROP_UNIQUE_NAME,
                    groupDn);
            DataObject member1 = SDOHelper.createDataObject(SchemaConstants.WIM_NS_URI, 
                    SchemaConstants.DO_ENTITY);
            // Configurar o uniqueName do membro a ser removido
            member1.createDataObject(SchemaConstants.DO_IDENTIFIER).setString(SchemaConstants.PROP_UNIQUE_NAME,
                    memberDn);
            // Recuperar o membro para removê-lo do grupo
            entity.getList(SchemaConstants.DO_MEMBERS).add(member1);
            // Configurar o controle de membro do grupo
            DataObject grpMbrCtrl = SDOHelper.createControlDataObject(root, null, 
                    SchemaConstants.DO_GROUP_MEMBER_CONTROL);
            // Modo remover designação para remover o membro do grupo
            grpMbrCtrl.setInt(SchemaConstants.PROP_MODIFY_MODE, SchemaConstants.VALUE_MODIFY_MODE_UNASSIGN); 
            System.out.println("Gráfico de dados de entrada antes de remover membro do grupo"+ printDO(root));
            // Atualizar o grupo para remover o membro
            root = service.update(root);
            System.out.println("Gráfico de dados de saída depois de remover membro do grupo"+ printDO(root));
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }

    /**
     *  deleteEntity Exclui a determinada entidade
     *  @param entityName
     */
    public static void deleteEntity(String entityName)
    {
        try
        {
            DataObject root = SDOHelper.createRootDataObject();
            DataObject entity = SDOHelper.createEntityDataObject(root, null, SchemaConstants.DO_ENTITY);
            // Configurar o controle de exclusão
            DataObject ctrl = SDOHelper.createControlDataObject(root, null, 
                    SchemaConstants.DO_DELETE_CONTROL);
            // Configurar a propriedade de retorno após a exclusão
            ctrl.setBoolean(SchemaConstants.PROP_RETURN_DELETED, true);
            // Configurar o uniqueName da entidade a ser excluída
            entity.createDataObject(SchemaConstants.DO_IDENTIFIER).set(SchemaConstants.PROP_UNIQUE_NAME,
                    entityName);
            System.out.println("Gráfico de dados de entrada antes de excluir entidade"+ printDO(root));
            // Excluir a entidade
            root  = service.delete(root);
            System.out.println("Gráfico de dados de saída depois de excluir a entidade"+ printDO(root));
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}

Gráficos de Dados de Entrada e Saída

Os gráficos de dados de entrada e os gráficos de dados de saída resultantes para cada etapa deste exemplo são fornecidos a seguir.

Gráfico de dados de entrada para criar um usuário, isto é, uma entidade do tipo PersonAccount:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:uid>user1</wim:uid>
      <wim:cn>user1cn</wim:cn>
      <wim:sn>user1sn</wim:sn>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>
Gráfico de dados de saída depois de criar um usuário:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:identifier externalName="uid=user1,o=defaultWIMFileBasedRealm" repositoryId="InternalFileRepository"
          uniqueId="96f69bb7-8048-4417-b871-37ebe7362bea" uniqueName="uid=user1,o=defaultWIMFileBasedRealm"/>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>
Gráfico de dados de entrada para criar um grupo, isto é, uma entidade do tipo Group:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:Group">
      <wim:cn>group1</wim:cn>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>
Gráfico de dados de saída depois de criar um grupo:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:Group">
      <wim:identifier externalName="cn=group1,o=defaultWIMFileBasedRealm" repositoryId="InternalFileRepository"
          uniqueId="a814ea28-1bfb-4093-b481-5bb128b4818a" uniqueName="cn=group1,o=defaultWIMFileBasedRealm"/>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>
Gráfico de dados de entrada para incluir um usuário em um grupo:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:Group">
      <wim:identifier uniqueName="cn=group1,o=defaultWIMFileBasedRealm"/>
      <wim:members>
        <wim:identifier uniqueName="uid=user1,o=defaultWIMFileBasedRealm"/>
      </wim:members>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>
Gráfico de dados de saída depois de incluir um usuário em um grupo:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:Group">
      <wim:identifier externalName="cn=group1,o=defaultWIMFileBasedRealm" repositoryId="InternalFileRepository"
          uniqueId="a814ea28-1bfb-4093-b481-5bb128b4818a" uniqueName="cn=group1,o=defaultWIMFileBasedRealm"/>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>
Gráfico de dados de entrada para obter os membros de um grupo com GroupMemberControl:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:Group">
      <wim:identifier uniqueName="cn=group1,o=defaultWIMFileBasedRealm"/>
    </wim:entities>
    <wim:controls xsi:type="wim:PropertyControl">
      <wim:properties>cn</wim:properties>
    </wim:controls>
    <wim:controls xsi:type="wim:GroupMemberControl">
      <wim:properties>cn</wim:properties>
      <wim:properties>uid</wim:properties>
    </wim:controls>
  </wim:Root>
</sdo:datagraph>
Gráfico de dados de saída depois de obter os membros de um grupo:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:Group">
      <wim:identifier externalName="cn=group1,o=defaultWIMFileBasedRealm" repositoryId="InternalFileRepository"
          uniqueId="a814ea28-1bfb-4093-b481-5bb128b4818a" uniqueName="cn=group1,o=defaultWIMFileBasedRealm"/>
      <wim:cn>group1</wim:cn>
      <wim:members xsi:type="wim:PersonAccount">
        <wim:identifier externalName="uid=user1,o=defaultWIMFileBasedRealm" repositoryId="InternalFileRepository"
            uniqueId="96f69bb7-8048-4417-b871-37ebe7362bea" uniqueName="uid=user1,o=defaultWIMFileBasedRealm"/>
        <wim:uid>user1</wim:uid>
        <wim:cn>user1cn</wim:cn>
      </wim:members>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>
Gráfico de dados de entrada para obter os grupos aos quais um usuário pertence (associação ao grupo) com o GroupMembershipControl:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:identifier uniqueName="uid=user1,o=defaultWIMFileBasedRealm"/>
    </wim:entities>
    <wim:controls xsi:type="wim:GroupMembershipControl">
      <wim:properties>cn</wim:properties>
    </wim:controls>
  </wim:Root>
</sdo:datagraph>
Gráfico de dados de saída depois de obter os grupos aos quais um usuário pertence:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:identifier externalName="uid=user1,o=defaultWIMFileBasedRealm" repositoryId="InternalFileRepository"
          uniqueId="96f69bb7-8048-4417-b871-37ebe7362bea" uniqueName="uid=user1,o=defaultWIMFileBasedRealm"/>
      <wim:groups>
        <wim:identifier externalName="cn=group1,o=defaultWIMFileBasedRealm" repositoryId="InternalFileRepository"
            uniqueId="a814ea28-1bfb-4093-b481-5bb128b4818a" uniqueName="cn=group1,o=defaultWIMFileBasedRealm"/>
        <wim:cn>group1</wim:cn>
      </wim:groups>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>
Gráfico de dados de entrada para remover um membro de um grupo com o GroupMemberControl:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:Group">
      <wim:identifier uniqueName="cn=group1,o=defaultWIMFileBasedRealm"/>
      <wim:members>
        <wim:identifier uniqueName="uid=user1,o=defaultWIMFileBasedRealm"/>
      </wim:members>
    </wim:entities>
    <wim:controls xsi:type="wim:GroupMemberControl" modifyMode="3"/>
  </wim:Root>
</sdo:datagraph>
Gráfico de dados de saída depois de remover um membro de um grupo:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:Group">
      <wim:identifier externalName="cn=group1,o=defaultWIMFileBasedRealm" repositoryId="InternalFileRepository"
          uniqueId="a814ea28-1bfb-4093-b481-5bb128b4818a" uniqueName="cn=group1,o=defaultWIMFileBasedRealm"/>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>
Gráfico de dados de entrada para excluir um usuário:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities>
      <wim:identifier uniqueName="uid=user1,o=defaultWIMFileBasedRealm"/>
    </wim:entities>
    <wim:controls xsi:type="wim:DeleteControl" returnDeleted="true"/>
  </wim:Root>
</sdo:datagraph>
Gráfico de dados de saída depois de excluir um usuário:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:PersonAccount">
      <wim:identifier externalName="uid=user1,o=defaultWIMFileBasedRealm" repositoryId="InternalFileRepository"
          uniqueId="96f69bb7-8048-4417-b871-37ebe7362bea" uniqueName="uid=user1,o=defaultWIMFileBasedRealm"/>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>
Gráfico de dados de entrada para excluir um grupo:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities>
      <wim:identifier uniqueName="cn=group1,o=defaultWIMFileBasedRealm"/>
    </wim:entities>
    <wim:controls xsi:type="wim:DeleteControl" returnDeleted="true"/>
  </wim:Root>
</sdo:datagraph>
Gráfico de dados de saída depois de excluir um grupo:
<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:entities xsi:type="wim:Group">
      <wim:identifier externalName="cn=group1,o=defaultWIMFileBasedRealm" repositoryId="InternalFileRepository"
          uniqueId="a814ea28-1bfb-4093-b481-5bb128b4818a" uniqueName="cn=group1,o=defaultWIMFileBasedRealm"/>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>


Termos de uso | Feedback