Puede desarrollar un módulo de inicio de sesión personalizado de
Java™ Authentication and Authorization Service (JAAS)
para añadir un nombre de usuario y una contraseña para autenticarse en una base de datos.
Acerca de esta tarea
Puede desarrollar un módulo de inicio de sesión personalizado JAAS que se puede invocar
cuando se cree una conexión de base de datos que requiera autenticación. El módulo de inicio de sesión
personalizado JAAS es responsable de crear una credencial de contraseña que contiene el nombre de usuario,
la contraseña y la fábrica de conexiones gestionada. El módulo de inicio de sesión debe añadir
la credencial de contraseña al conjunto de credenciales privadas del sujeto que se debe utilizar
para autenticarse en la base de datos.
Procedimiento
- Cree una clase que implemente la interfaz javax.security.auth.spi.LoginModule.
- Guarde los campos necesarios en el método initialize. Por ejemplo:
/** {@inheritDoc} */
@SuppressWarnings("unchecked")
@Override
public void initialize(Subject subject, CallbackHandler callbackHandler, Map<String, ?> sharedState, Map<String, ?> options) {
this.callbackHandler = callbackHandler;
this.subject = subject;
this.sharedState = (Map<String, Object>) sharedState;
this.options = options;
}
- Maneje las devoluciones de llamada WSManagedConnectionFactoryCallback y
WSMappingPropertiesCallback en el método de inicio de sesión. Por ejemplo:
/** {@inheritDoc} */
@Override
public boolean login() throws LoginException {
...
Callback callbacks[] = new Callback[2];
callbacks[0] = new WSManagedConnectionFactoryCallback("Target ManagedConnectionFactory: ");
callbacks[1] = new WSMappingPropertiesCallback("Mapping Properties (HashMap): ");
callbackHandler.handle(callbacks);
- Obtenga la fábrica de conexiones gestionada y las propiedades en el método de inicio de sesión. Por ejemplo:
// El método getManagedConnectionFactory se debe
utilizar tal como se indica para la compatibilidad con WebSphere
tradicional
ManagedConnectionFactory managedConnectionFactory = ((WSManagedConnectionFactoryCallback) callbacks[0]).getManagedConnectionFacotry();
Map properties = ((WSMappingPropertiesCallback) callbacks[1]).getProperties();
- Obtenga el nombre de usuario y contraseña basándose en el alias de datos de autenticación o algún
otro criterio. Por ejemplo:
String alias = (String) properties.get(com.ibm.wsspi.security.auth.callback.Constants.MAPPING_ALIAS);
String user = getUser(alias); // Implementación específica
char[] password = getPassword(alias); // Implementación específica
- Cree un objeto javax.resources.spi.PasswordCredential con el nombre de usuario y la
contraseña y establezca la fábrica de conexiones gestionada. Por ejemplo:
javax.resource.spi.security.PasswordCredential passwordCredential = new PasswordCredential(user, password);
passwordCredential.setManagedConnectionFactory(managedConnectionFactory);
- Añada la credencial de contraseña al sujeto en el método de confirmación. Por ejemplo:
/** {@inheritDoc} */
@Override
public boolean commit() throws LoginException {
// Verificar que el inicio de sesión se ha realizado satisfactoriamente antes de añadir PasswordCredential al sujeto.
subject.getPrivateCredentials().add(passwordCredential);
return true;
}