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;
}