Процесс входа в систему с Shiro занимает слишком много времени, когда загрузка процессора составляет 100% - PullRequest
4 голосов
/ 09 апреля 2019

Я использую Apache Shiro 1.2.3 для управления процессом входа в мое приложение. Приложение имеет фоновый процесс, который передает данные для обработки; все работает нормально, когда приложение работает с низкой или средней загрузкой данных, но когда приложение получает большой объем данных для обработки, оно начинает использовать 100% ЦП.

Одна из проблем заключается в том, что если вы попытаетесь войти в приложение, когда это происходит, процесс входа в систему занимает 20-35 секунд (но, когда процессор свободен, он занимает всего около 0,5 секунды). Ища внутри «конфликтующего» кода, я нашел этот код, который занимает большую часть времени процесса входа в систему:

this.getCredentialsMatcher().doCredentialsMatch(token, info)

По сути, этот код пытается выяснить, совпадает ли пароль, сохраненный в базе данных (пароль хранится в хэше с алгоритмом SHA-512 с 100 000 итераций), с паролем, введенным пользователем в форме входа в систему.

Я использую пользовательский сервис HashingPasswordService, а вот код метода паролей:

public boolean passwordsMatch(Object plaintext, Hash saved) {

    ByteSource plaintextBytes = createByteSource(plaintext);

    if (saved == null || saved.isEmpty()) {
        return plaintextBytes == null || plaintextBytes.isEmpty();
    } else {
        if (plaintextBytes == null || plaintextBytes.isEmpty()) {
            return false;
        }
    }

    HashRequest request = buildHashRequest(plaintextBytes, saved);

    Hash computed = this.hashService.computeHash(request);

    return saved.equals(computed);
}

Есть идеи, почему процесс входа в систему занимает столько времени, когда процессор полностью работает?

Заранее спасибо!

...