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[]
    {
    };
}

}

0 ответов

Другие вопросы по тегам