Ejemplo: Configuración de inicio de sesión de ejemplo para RMI_OUTBOUND

Este ejemplo muestra una configuración de conexión de ejemplo para RMI_OUTBOUND que determina si los nombres de dominio coinciden en dos servidores.

public customLoginModule() 
{
	public void initialize(Subject subject, CallbackHandler callbackHandler, 
     Map sharedState, Map options) 
	{
     // (Para obtener más información sobre los pasos a seguir durante la inicialización, consulte 
     // Desarrollo de módulos de inicio de sesión personalizados para una configuración de inicio de sesión del sistema para JAAS.)
	}

	public boolean login() throws LoginException 
	{
     // (Para obtener más información sobre los pasos a seguir durante la conexión, consulte
     // Desarrollo de módulos de inicio de sesión personalizados para una configuración de inicio de sesión del sistema para JAAS.)

				// Obtiene el objeto WSProtocolPolicyCallback
				Callback callbacks[] = new Callback[1];
						callbacks[0] = new com.ibm.wsspi.security.auth.callback.
          WSProtocolPolicyCallback("Protocol Policy Callback: ");
	        
		try
		{
			callbackHandler.handle(callbacks);
		} 
		catch (Exception e)
		{
			// Maneja la excepción
		} 
            
     // Recibe el objeto de política RMI (CSIv2) para comprobar el dominio de destino 
     // basándose en la información de IOR.
     // Nota: Este objeto se puede utilizar para realizar comprobaciones de seguridad adicionales. 
     // Consulte la documentación de la API (interfaz de programación de aplicaciones) para obtener 
     // más información.
				csiv2PerformPolicy = (CSIv2PerformPolicy) ((WSProtocolPolicyCallback)callbacks[0]).
        getProtocolPolicy();
        
				// Comprueba si los dominios no coinciden. Si no coinciden, iniciar la sesión para 
     // ejecutar una correlación
				if (!csiv2PerformPolicy.getTargetSecurityName().equalsIgnoreCase(csiv2PerformPolicy.
         getCurrentSecurityName()))
		{
			try
			{
								// Efectuar un dominio personalizado -> correlación de ID de usuario y contraseña
								MyBasicAuthDataObject myBasicAuthData = MyMappingLogin.lookup 				
																				(csiv2PerformPolicy.getTargetSecurityName());

          // Crea el contexto de inicio de sesión con datos de autenticación básicos 
          // recopilados en la correlación personalizada
										javax.security.auth.login.LoginContext ctx = new LoginContext("WSLogin",
												new WSCallbackHandlerImpl(myBasicAuthData.userid, 
																csiv2PerformPolicy.getTargetSecurityName(), 
                    myBasicAuthData.password));

							// Inicia la conexión	
										ctx.login();

             // Obtiene el asunto del contexto. Este asunto se utiliza para sustituir 
             // el Subject que se ha pasado durante la fase de confirmación.
										basic_auth_subject = ctx.getSubject();
				} 
					catch (javax.security.auth.login.LoginException e)
				{
										throw new com.ibm.websphere.security.auth.
               WSLoginFailedException (e.getMessage(), e);
				}
		}
	}

	public boolean commit() throws LoginException 
	{
     // (Si desea obtener más información sobre qué hacer durante la confirmación, consulte
     // Desarrollo de módulos de inicio de sesión personalizados para una configuración de inicio de sesión del sistema para JAAS.)

				if (basic_auth_subject != null)
		{
       // Lo elimina todo del Subject actual y añade todo a partir de 
       // basic_auth_subject
			try
			{
								public final Subject basic_auth_subject_priv = basic_auth_subject;
          // Hágalo en un bloque de código doPrivileged para que el código de aplicación 
          // no necesite añadir permisos adicionales
				java.security.AccessController.doPrivileged(new java.security.
             PrivilegedExceptionAction() 
				{
										public Object run() throws WSLoginFailedException
					{
               // Elimina todo lo específico del usuario del Subject de salida
               // actual. Es un Subject temporal para esta invocación específica 
               // para que no afecte al Subject establecido en la hebra. Puede 
               // mantener objetos personalizados que desee propagar en el Subject. 
               // Este ejemplo lo elimina todo y sólo añade la información nueva 
               // otra vez.
						try
						{
						 						 subject.getPublicCredentials().clear();
						 						 subject.getPrivateCredentials().clear();
						 						 subject.getPrincipals().clear();
						} 
						catch (Exception e)
						{
						 throw new WSLoginFailedException (e.getMessage(), e);
						}

               // Añade todo el contenido de basic_auth_subject al asunto de conexión.
               // Esto completa la correlación con el usuario nuevo.
						try
						{
						 						 subject.getPublicCredentials().addAll(basic_auth_subject.
                   getPublicCredentials());
						 						 subject.getPrivateCredentials().addAll(basic_auth_subject.
                   getPrivateCredentials());
						 						 subject.getPrincipals().addAll(basic_auth_subject.
                   getPrincipals());
						} 
						catch (Exception e)
						{
						 throw new WSLoginFailedException (e.getMessage(), e);
						}

						return null;
					}
				});
			}
						catch (PrivilegedActionException e)
			{
								throw new WSLoginFailedException (e.getException().getMessage(), 
             e.getException());
			}
		}
	}

	// Define las variables del módulo de inicio de sesión
		com.ibm.wsspi.security.csiv2.CSIv2PerformPolicy csiv2PerformPolicy = null;
		javax.security.auth.Subject basic_auth_subject = null;
}

Icon that indicates the type of topic Reference topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=xsec_samprmiinbound
File name: xsec_samprmiinbound.html