Puede desarrollar un módulo de inicio de sesión personalizado 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;
}
- Manejar 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:
// The method getManagedConnectionFactory must be used as shown for compatibility with WebSphere traditional
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); // Implementation specific
char[] password = getPassword(alias); // Implementation specific
- 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 {
// Verify that the login was successful before adding the PasswordCredential to the subject.
subject.getPrivateCredentials().add(passwordCredential);
return true;
}