Java 11: Kerberos с использованием GSS API

#kerberos #java-11 #gssapi

#kerberos #java-11 #gssapi

Вопрос:

Я обновляю проект до Java 11. Я понял, что некоторые внутренние пакеты, такие как sun.security.krb5.Config amp; sun.security.krb5.KrbException , больше не «видны» из-за модулей. Ниже приведены несколько примеров того, как кодовая база использует эти пакеты:

 Exception cause = ExceptionUtils.findCause(ne, KrbException.class);

LoginException le = (LoginException) ne.getCause();
                if (le.getCause() instanceof KrbException) {
                    KrbException ke = (KrbException) le.getCause();

try {
                    sun.security.krb5.Config.refresh();
                } catch (KrbException e) {
//log something
}
  

Я читал, что эти внутренние пакеты должны быть реализованы с использованием GSS API.

Я просматривал классы и руководства GSS, но не смог найти ничего о замене внутренних пакетов, упомянутых выше.

Ответ №1:

Примите LoginException как есть. Предполагается, что JAAS абстрагируется от всего. У вас просто плохой код.

Комментарии:

1. Не могли бы вы, пожалуйста, объяснить, что вы имеете в виду, принимая LoginException как есть? Вы имеете в виду, что я должен просто заменить KrbException на LoginException? Кроме того, как насчет sun.security.krb5.Config.refresh(); это также внутренняя ссылка на API.

2. Прежде всего, теперь в Krb5LoginModule : refreshKrb5Config есть свойство конфигурации обновления. Вы проходите через несколько уровней абстракции. Вы не взаимодействуете с Kerberos напрямую, поэтому вы должны не использовать внутренние исключения или, что еще хуже, внутренние API. Это делает код непереносимым или хрупким. Вот пример того, как его следует использовать. Когда вы используете MIT Kerberos, вы также никогда не получаете внутренних ошибок Kerberos, только коды состояния GSS-API и некоторые специфические для меха.

3. Спасибо, что поделились этой реализацией. Думаю, теперь я понимаю это немного лучше. Однако из официальных документов я вижу refreshKrb5Config: Set this to true, if you want the configuration to be refreshed before the login method is called. Есть ли способ вручную запустить обновление конфигурации отдельно от потока входа в систему?

4. Такого нет, и зачем вам это нужно, если модуль все равно обновляется перед входом в систему?

5. Если getCause() не содержит его, нет. Вы также можете проверить исходный код Krb5LoginModule на Github. Обратите внимание, что использование GSS-API также не дает вам доступа к низкоуровневым ошибкам Kerberos.