Exemplo: Módulo de Login Personalizado para Mapeamento de Entrada

Essa amostra mostra um módulo de login personalizado que cria uma tabela hash java.util.Hashtable baseada no retorno de chamada NameCallback especificado. O hashtable java.util.Hashtable é incluído no mapa sharedState java.util.Map para que os módulos de login do WebSphere Application Server possam localizar as informações no Hashtable.

public customLoginModule() 
{

public void initialize(Subject subject, CallbackHandler callbackHandler, 
   Map sharedState, Map options) 
{
	// (Para obter mais informações sobre inicialização, consulte 
	//  Desenvolvendo Módulos de Login Customizado para uma Configuração de Login do Sistema para JAAS.)
	_sharedState = sharedState;
}

public boolean login() throws LoginException 
{
	// (Para obter mais informações sobre o que fazer durante o login, consulte 
	//  Desenvolvendo Módulos de Login Customizado para uma Configuração de Login do Sistema para JAAS.)

   // Manipula o WSTokenHolderCallback para ver se este é um login inicial 
   // ou de propagação.
	javax.security.auth.callback.Callback callbacks[] = 
     new javax.security.auth.callback.Callback[3];
	callbacks[0] = new javax.security.auth.callback.NameCallback("");
	callbacks[1] = new javax.security.auth.callback.PasswordCallback(
     "Password: ", false);
	callbacks[2] = new com.ibm.websphere.security.auth.callback.
     WSCredTokenCallbackImpl("");
	callbacks[3] = new com.ibm.wsspi.security.auth.callback.
     WSTokenHolderCallback("");

	try
	{
		callbackHandler.handle(callbacks);
	} 
	catch (Exception e)
	{
		// Manipula a exceção
	} 

	// Determina quais retornos de chamadas contêm informações
	boolean identitySwitched = false;
	String uid = ((NameCallback) callbacks[0]).getName();
	char password[] = ((PasswordCallback) callbacks[1]).getPassword();
	byte[] credToken = ((WSCredTokenCallbackImpl) callbacks[2]).getCredToken();
	java.util.List authzTokenList = ((WSTokenHolderCallback) callbacks[3]).
     getTokenHolderList();

	if (credToken != null)
	{
		try
		{
			String uniqueID = WSSecurityPropagationHelper.validateLTPAToken(credToken);
			String realm = WSSecurityPropagationHelper.getRealmFromUniqueID (uniqueID);
       // Defina a cadeia como o UID para que você possa utilizar as informações para 
       // mapear ou efetuar login.
			uid = WSSecurityPropagationHelper.getUserFromUniqueID (uniqueid);
		}
		catch (Exception e)
		{
			// manipular a exceção
		}	
	}
	else if (uid == null)
	{
		// Os dados de autenticação não são válidos. Você deve ter um UID 
    // ou CredToken
		throw new WSLoginFailedException("invalid authentication data.");
	}
	else if (uid != null && password != null)
	{
     // Essa é uma autenticação típica. É possível escolher mapear esse ID para
     // outro ID ou ignorá-lo e permitir que o WebSphere Application Server
     // efetue login por você. Quando as senhas forem apresentadas, tome cuidado para não
     // validar a senha, porque esta é a autenticação inicial.
		
		return true;
	}

  // É possível mapear esse uid para algo diferente e configurar o booleano 
  // identitySwitched. Se a identidade for alterada, limpe os seguintes atributos 
  // propagados para que não sejam utilizados incorretamente.
	uid = myCustomMappingRoutine (uid);
	
	// Limpe os atributos propagados porque eles não se aplicam mais à nova identidade
	if (identitySwitched)
	{
		((WSTokenHolderCallback) callbacks[3]).setTokenHolderList(null);
	}
	boolean requiresLogin = ((com.ibm.wsspi.security.auth.callback.
     WSTokenHolderCallback) callbacks[2]).getRequiresLogin();

	if (requiresLogin || identitySwitched)
	{
		// Recupera o InitialContext padrão para esse servidor.
		javax.naming.InitialContext ctx = new javax.naming.InitialContext();

		// Recupera o objeto UserRegistry local.
		com.ibm.websphere.security.UserRegistry reg = 
         (com.ibm.websphere.security.UserRegistry) ctx.lookup("UserRegistry");				

		// Recupera o uniqueID de registro com base no uid especificado 
     // no NameCallback.
		String uniqueid = reg.getUniqueUserId(uid);
	 	uid = WSSecurityPropagationHelper.getUserFromUniqueID (uniqueid);
			
		// Recupera o nome de exibição do registro do usuário com base no uniqueID.
		String securityName = reg.getUserSecurityName(uid);
	
		// Recupera os grupos associados a esse uniqueID.
		java.util.List groupList = reg.getUniqueGroupIds(uid);
			
		// Cria java.util.Hashtable com as informações reunidas 
     // do UserRegistry.
		java.util.Hashtable hashtable = new java.util.Hashtable();
		hashtable.put(com.ibm.wsspi.security.token.AttributeNameConstants.
       WSCREDENTIAL_UNIQUEID, uniqueid);						
     hashtable.put(com.ibm.wsspi.security.token.AttributeNameConstants.
       WSCREDENTIAL_SECURITYNAME, securityName);
		hashtable.put(com.ibm.wsspi.security.token.AttributeNameConstants.
       WSCREDENTIAL_GROUPS, groupList);

		// Inclui uma chave de cache que é utilizada como parte do mecanismo de consulta do 
		// para o Subject criado. A chave de cache pode ser um objeto, mas possui  
		// um método toString implementado. Certifique-se de que cacheKey contém 
		// informações suficientes para o escopo ao usuário e quaisquer atributos adicionais que 
     // estão sendo utilizados. Se você não especificar essa propriedade, o Subject é colocado no escopo do
		// WSCREDENTIAL_UNIQUEID retornado, por padrão.
		hashtable.put(com.ibm.wsspi.security.token.AttributeNameConstants.
       WSCREDENTIAL_CACHE_KEY, "myCustomAttribute" + uniqueid);
		// Inclui a tabela hash para o estado compartilhado do Subject.
		_sharedState.put(com.ibm.wsspi.security.token.AttributeNameConstants.
       WSCREDENTIAL_PROPERTIES_KEY,hashtable);
	}
	else if (requiresLogin == false)
	{
		// Para obter mais informações sobre essa seção, consulte 
     // Propagação de Atributo de Segurança.
		// Se você incluiu uma implementação de Símbolo personalizada, é possível procurar pela 
     // lista de portadores de símbolos para que seja desserializada.
		// Nota: Qualquer objeto Java será desserializado automaticamente por 
     // wsMapDefaultInboundLoginModule
		
		for (int i=0; i<authzTokenList.size(); i++)
		{
			TokenHolder tokenHolder = (TokenHolder) authzTokenList.get(i);
			if (tokenHolder.getName().equals("com.acme.MyCustomTokenImpl"))
			{
						byte[] myTokenBytes = tokenHolder.getBytes();

          // Transmite esses bytes no construtor da classe de 
          // implementação para desserialização.
						com.acme.MyCustomTokenImpl myTokenImpl = new com.acme.MyCustomTokenImpl(myTokenBytes);
			}
		}
	}
}

public boolean commit() throws LoginException 
{
	// (Para obter mais informações sobre o que fazer durante uma consolidação, consulte
  //   Desenvolvendo Módulos de Login Customizado para uma Configuração de Login do Sistema para JAAS.)
}

// Define as variáveis do módulo de login
com.ibm.wsspi.security.token.AuthorizationToken customAuthzToken = null;
com.ibm.wsspi.security.token.AuthenticationToken defaultAuthToken = null;
java.util.Map _sharedState = null;
}

Ícone que indica o tipo de tópico Tópico de Referência



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=xsec_custloginbmap
Nome do arquivo: xsec_custloginbmap.html