JBoss EAP 6 Домен безопасности источника данных - блокирует ИД пользователя БД при перезапуске
Для источника данных, созданного в JBoss EAP 6, для аутентификации указан домен безопасности. Иногда, когда сервер перезапускается, идентификатор базы данных блокируется, используемой базой данных является Sybase. Проблема возникает не всегда, а время от времени. Ниже приведен код модуля входа в систему. Может кто-нибудь помочь? Благодарю.
открытый класс DataSourceLoginModule extends AbstractPasswordCredentialLoginModule {
private String username;
private String password;
private final String key = "key";
@Override
public void initialize(Subject subject, CallbackHandler handler, Map<String, ?> sharedState, Map<String, ?> options)
{
super.initialize(subject, handler, sharedState, options);
Logger.getLogger(this.getClass().getName()).log(Level.INFO, "[Password encrypter] Initializing.");
username = (String) options.get("username");
if (username == null)
{
// NR : try with userName
username = (String) options.get("userName");
if (username == null)
{
throw new IllegalArgumentException("Username is null");
}
}
password = (String) options.get("password");
if (password == null)
{
Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, "[Password encrypter] Initialization error!!!");
throw new IllegalArgumentException("Password is null");
}
Logger.getLogger(this.getClass().getName()).log(Level.INFO, "[Password encrypter] Initialized.");
}
@Override
public boolean login()
throws LoginException
{
Logger.getLogger(this.getClass().getName()).log(Level.INFO, "[Password encrypter] Logging in.");
if (super.login())
{
Logger.getLogger(this.getClass().getName()).log(Level.INFO, "[Password encrypter] Super logged in.");
return true;
}
super.loginOk = true;
Logger.getLogger(this.getClass().getName()).log(Level.INFO, "[Password encrypter] Logged in.");
return true;
}
@Override
public boolean commit()
throws LoginException
{
Logger.getLogger(this.getClass().getName()).log(Level.INFO, "[Password encrypter] Commiting.");
Principal principal = new SimplePrincipal(username);
SubjectActions.addPrincipals(subject, principal);
sharedState.put("javax.security.auth.login.name", username);
// Decode the encrypted password
try
{
Logger.getLogger(this.getClass().getName()).log(Level.INFO, "[Password encrypter] Decoding password.");
char[] decodedPassword = Decrypt.decryptPassword(password, key).toCharArray();
Logger.getLogger(this.getClass().getName()).log(Level.INFO, "[Password encrypter] Decoded password.");
PasswordCredential cred = new PasswordCredential(username, decodedPassword);
SubjectActions.addCredentials(subject, cred);
}
catch (Exception e)
{
Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, "[Password encrypter] Commit error!!!");
LoginException le = new LoginException(e.getLocalizedMessage());
le.initCause(e);
throw le;
}
Logger.getLogger(this.getClass().getName()).log(Level.INFO, "[Password encrypter] Commited.");
return true;
}
@Override
public boolean abort()
{
Logger.getLogger(this.getClass().getName()).log(Level.INFO, "[Password encrypter] Aborted.");
username = null;
password = null;
return true;
}
@Override
protected Principal getIdentity()
{
Principal principal = new SimplePrincipal(username);
return principal;
}
@Override
protected Group[] getRoleSets()
throws LoginException
{
return new Group[]
{
};
}
}