Класс GSSManager

public abstract class GSSManager
extends Object

Этот класс служит фабрикой для других важных классов GSS-API и также предоставляет информацию о поддерживаемых механизмах. Он может создавать экземпляры классов, реализующих следующие три интерфейса GSS-API: GSSName, GSSCredential и GSSContext. Он также имеет методы для запроса списка доступных механизмов и типов имен, которые поддерживает каждый механизм.

Экземпляр по умолчанию GSSManager подкласса может быть получен через статический метод getInstance, но приложения могут свободно создавать другие подклассы GSSManager. Экземпляр по умолчанию GSSManager будет поддерживать механизм Kerberos v5 GSS-API, а также любые другие. Этот механизм идентифицируется Oid "1.2.840.113554.1.2.2" и определен в RFC 1964.

Подкласс, расширяющий GSSManager абстрактный класс, может быть реализован как модульный провайдер, использующий некоторые известные спецификации провайдеров. API GSSManager позволяет приложению задавать предпочтения провайдера для такой реализации. Эти методы также позволяют реализации выбрасывать четко определённое исключение в случае, если поддержка провайдер-зависимой конфигурации не поддерживается. Приложения, которые ожидают портативности, должны быть осведомлены об этом и обрабатывать исключение надлежащим образом.

Предполагается, что будет три наиболее распространённых способа использования провайдеров:

  1. Приложение не заботится о том, какой провайдер используется (случай по умолчанию).
  2. Приложение хочет, чтобы определённый провайдер использовался в приоритете, либо для определённого механизма, либо всегда, независимо от механизма.
  3. Приложение хочет использовать локально настроенные провайдеры по возможности, но если отсутствует поддержка одного или нескольких механизмов, то оно хочет перейти к собственному провайдеру.

Класс GSSManager имеет два метода, которые позволяют использовать эти режимы: addProviderAtFront и addProviderAtEnd. Эти методы создают упорядоченный список пар <провайдер, oid>, где каждая пара указывает предпочтение провайдера для данного oid.

Важно отметить, что существуют определенные взаимодействия между различными объектами GSS-API, созданными GSSManager, где провайдер, используемый для определенного механизма, должен быть согласован во всех объектах. Например, если GSSCredential содержит элементы из провайдера p для механизма m, то его следует передавать в GSSContext, который будет использовать провайдер p для механизма m. Простым правилом, которое максимизирует портативность, является то, что объекты, созданные из разных GSSManager, не должны смешиваться, и, если возможно, должен быть создан другой экземпляр GSSManager, если приложение хочет вызвать метод addProviderAtFront на GSSManager, который уже создал объект.

Вот пример кода, показывающий, как может быть использован GSSManager:

GSSManager manager = GSSManager.getInstance();

     Oid krb5Mechanism = new Oid("1.2.840.113554.1.2.2");
     Oid krb5PrincipalNameType = new Oid("1.2.840.113554.1.2.2.1");

     // Identify who the client wishes to be
     GSSName userName = manager.createName("duke", GSSName.NT_USER_NAME);

     // Identify the name of the server. This uses a Kerberos specific
     // name format.
     GSSName serverName = manager.createName("nfs/foo.sun.com",
                                             krb5PrincipalNameType);

     // Acquire credentials for the user
     GSSCredential userCreds = manager.createCredential(userName,
                                             GSSCredential.DEFAULT_LIFETIME,
                                             krb5Mechanism,
                                             GSSCredential.INITIATE_ONLY);

     // Instantiate and initialize a security context that will be
     // established with the server
     GSSContext context = manager.createContext(serverName,
                                                krb5Mechanism,
                                                userCreds,
                                                GSSContext.DEFAULT_LIFETIME);

Сторона сервера может использовать следующее изменение этого источника:

// Acquire credentials for the server
     GSSCredential serverCreds = manager.createCredential(serverName,
                                             GSSCredential.DEFAULT_LIFETIME,
                                             krb5Mechanism,
                                             GSSCredential.ACCEPT_ONLY);

     // Instantiate and initialize a security context that will
     // wait for an establishment request token from the client
     GSSContext context = manager.createContext(serverCreds);
С момента:
1.4
См. также:
GSSName, GSSCredential, GSSContext

Конструкторы

Конструктор Описание
GSSManager()

Методы

Модификатор и тип Метод Описание
abstract void addProviderAtEnd​(Provider p, Oid mech)

Этот метод используется для указания GSSManager, что приложение хочет использовать определённый провайдер, если нет другого провайдера, который поддерживает данный механизм.

abstract void addProviderAtFront​(Provider p, Oid mech)

Этот метод используется для указания GSSManager, что приложение хочет использовать определённый провайдер впереди всех остальных при необходимости поддержки данного механизма.

abstract GSSContext createContext​(byte[] interProcessToken)

Метод-фабрика для создания ранее экспортированного контекста.

abstract GSSContext createContext​(GSSCredential myCred)

Метод-фабрика для создания контекста со стороны акцептора.

abstract GSSContext createContext​(GSSName peer, Oid mech, GSSCredential myCred, int lifetime)

Метод-фабрика для создания контекста со стороны инициатора.

abstract GSSCredential createCredential​(int usage)

Метод-фабрика для получения учётных данных по умолчанию.

abstract GSSCredential createCredential​(GSSName name, int lifetime, Oid[] mechs, int usage)

Метод-фабрика для получения учётных данных по набору механизмов.

abstract GSSCredential createCredential​(GSSName name, int lifetime, Oid mech, int usage)

Метод-фабрика для получения учётных данных для одного механизма.

abstract GSSName createName​(byte[] name, Oid nameType)

Метод-фабрика для преобразования массива байтов, содержащего имя из указанного пространства имён, в объект GSSName.

abstract GSSName createName​(byte[] name, Oid nameType, Oid mech)

Метод-фабрика для преобразования массива байтов, содержащего имя из указанного пространства имён, в объект GSSName и одновременной канонизации для механизма.

abstract GSSName createName​(String nameStr, Oid nameType)

Метод-фабрика для преобразования строкового имени из указанного пространства имён в объект GSSName.

abstract GSSName createName​(String nameStr, Oid nameType, Oid mech)

Метод-фабрика для преобразования строкового имени из указанного пространства имён в объект GSSName и одновременной канонизации для механизма.

static GSSManager getInstance()

Возвращает реализацию GSSManager по умолчанию.

abstract Oid[] getMechs()

Возвращает список механизмов, доступных вызывающим сторонам GSS-API через этот GSSManager.

abstract Oid[] getMechsForName​(Oid nameType)

Возвращает список механизмов, которые поддерживают указанный тип имени.

abstract Oid[] getNamesForMech​(Oid mech)

Возвращает типы имён, поддерживаемые указанным механизмом.

Методы, объявленные в классе java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Конструкторы

GSSManager

public GSSManager()

Методы

getInstance

public static GSSManager getInstance()

Возвращает реализацию GSSManager по умолчанию.

Возвращает:
реализация GSSManager

getMechs

public abstract Oid[] getMechs()

Возвращает список механизмов, доступных вызывающим сторонам GSS-API через этот GSSManager. По умолчанию GSSManager, полученный из метода getInstance(), включает Oid "1.2.840.113554.1.2.2" в свой список. Этот Oid идентифицирует механизм GSS-API Kerberos v5, определенный в RFC 1964.

Возвращает:
массив объектов Oid, соответствующих доступным механизмам. Значение null возвращается, когда механизмы недоступны (например, когда механизмы динамически настраиваются и в настоящее время не установлены).

getNamesForMech

public abstract Oid[] getNamesForMech(Oid mech)
                               throws GSSException

Возвращает типы имен, поддерживаемые указанным механизмом.

По умолчанию экземпляр GSSManager включает поддержку механизма Kerberos v5. Когда указан этот механизм ("1.2.840.113554.1.2.2"), возвращаемый список будет содержать по крайней мере следующие типы имен: GSSName.NT_HOSTBASED_SERVICE, GSSName.NT_EXPORT_NAME и специфичный для Kerberos v5 Oid "1.2.840.113554.1.2.2.1". Пространство имен для Oid "1.2.840.113554.1.2.2.1" определено в RFC 1964.

Параметры:
mech - Oid механизма, для которого необходимо выполнить запрос
Возвращает:
массив объектов Oid, соответствующих типам имен, которые поддерживает механизм.
Выбрасывает:
GSSException - содержащий следующие основные коды ошибок: GSSException.BAD_MECH GSSException.FAILURE
См. также:
getMechsForName(Oid)

getMechsForName

public abstract Oid[] getMechsForName(Oid nameType)

Возвращает список механизмов, которые поддерживают указанный тип имени.

Механизм Kerberos v5 ("1.2.840.113554.1.2.2") всегда будет возвращаться в этом списке, когда указанный тип имени является одним из GSSName.NT_HOSTBASED_SERVICE, GSSName.NT_EXPORT_NAME или "1.2.840.113554.1.2.2.1".

Параметры:
nameType - Oid типа имени для поиска
Возвращает:
массив объектов Oid, соответствующих механизмам, которые поддерживают указанный тип имени. null возвращается, когда механизмы, поддерживающие указанный тип имени, не найдены.
См. также:
getNamesForMech(Oid)

createName

public abstract GSSName createName(String nameStr,
                                   Oid nameType)
                            throws GSSException

Метод-фабрика для преобразования строкового имени из указанного пространства имен в объект GSSName. В общем случае, созданный объект GSSName будет содержать несколько представлений имени, по одному для каждого поддерживаемого механизма; два примера исключений из этого правила - когда параметр типа пространства имен указывает NT_EXPORT_NAME или когда реализация GSS-API не является многомеханической. Не рекомендуется использовать этот метод с типом NT_EXPORT_NAME, потому что представление ранее экспортированного имени, состоящего из произвольных байтов, в виде строки может вызвать проблемы со схемами кодирования символов. В таких случаях рекомендуется передавать байты напрямую в перегруженный вариант этого метода createName.

Параметры:
nameStr - строка, представляющая печатную форму создаваемого имени.
nameType - Oid, определяющий пространство имен печатного имени. null может быть использован для указания того, что механизм должен предположить специфичный для него стандартный печатный синтаксис для каждого механизма, проверяющего nameStr. Не рекомендуется использовать nametype NT_EXPORT_NAME с этим методом.
Возвращает:
GSSName, представляющий указанного принципала
Выбрасывает:
GSSException - содержащий следующие основные коды ошибок: GSSException.BAD_NAMETYPE, GSSException.BAD_NAME, GSSException.BAD_MECH, GSSException.FAILURE
См. также:
GSSName, GSSName.NT_EXPORT_NAME

createName

public abstract GSSName createName(byte[] name,
                                   Oid nameType)
                            throws GSSException

Метод-фабрика для преобразования массива байтов, содержащего имя из указанного пространства имен, в объект GSSName. В общем случае, созданный объект GSSName будет содержать несколько представлений имени, по одному для каждого поддерживаемого механизма; два примера исключений из этого правила - когда параметр типа пространства имен указывает NT_EXPORT_NAME или когда реализация GSS-API не является многомеханической. Байты, передаваемые на вход, интерпретируются каждым базовым механизмом в соответствии с некоторой схемой кодирования, выбранной для данного типа имени.

Параметры:
name - массив байтов, содержащий имя для создания
nameType - Oid, определяющий пространство имен имени, предоставленного в массиве байтов. null может быть использован для указания того, что механизм должен предположить специфичный для него синтаксис для каждого механизма, проверяющего массив байтов.
Возвращает:
GSSName, представляющий указанного принципала
Выбрасывает:
GSSException - содержащий следующие основные коды ошибок: GSSException.BAD_NAMETYPE, GSSException.BAD_NAME, GSSException.BAD_MECH, GSSException.FAILURE
См. также:
GSSName, GSSName.NT_EXPORT_NAME

createName

public abstract GSSName createName(String nameStr,
                                   Oid nameType,
                                   Oid mech)
                            throws GSSException

Метод-фабрика для преобразования строкового имени из указанного пространства имен в объект GSSName и его канонизации для механизма. Другими словами, этот метод - это утилита, выполняющая эквивалент двух шагов: createName, а затем также GSSName.canonicalize.

Параметры:
nameStr - строка, представляющая печатную форму создаваемого имени.
nameType - Oid, определяющий пространство имен печатного имени. null может быть использован для указания того, что механизм должен предположить специфичный для него стандартный печатный синтаксис для каждого механизма, проверяющего nameStr. Не рекомендуется использовать nametype NT_EXPORT_NAME с этим методом.
mech - Oid, определяющий механизм, для которого должно быть выполнено каноническое преобразование имени
Возвращает:
GSSName, представляющий указанного принципала
Выбрасывает:
GSSException - содержащий следующие основные коды ошибок: GSSException.BAD_NAMETYPE, GSSException.BAD_NAME, GSSException.BAD_MECH, GSSException.FAILURE
См. также:
GSSName.canonicalize(Oid), GSSName.NT_EXPORT_NAME

createName

public abstract GSSName createName(byte[] name,
                                   Oid nameType,
                                   Oid mech)
                            throws GSSException

Метод-фабрика для преобразования массива байтов, содержащего имя из указанного пространства имен, в объект GSSName и его канонизации для механизма. Другими словами, этот метод - это утилита, выполняющая эквивалент двух шагов: createName и затем также GSSName.canonicalize.

Параметры:
name - массив байтов, содержащий имя для создания
nameType - Oid, определяющий пространство имен имени, предоставленного в массиве байтов. null может быть использован для указания того, что механизм должен предположить специфичный для него синтаксис для каждого механизма, проверяющего массив байтов.
mech - Oid, определяющий механизм, для которого должно быть выполнено каноническое преобразование имени
Возвращает:
GSSName, представляющий указанного принципала
Выбрасывает:
GSSException - содержащий следующие основные коды ошибок: GSSException.BAD_NAMETYPE, GSSException.BAD_NAME, GSSException.BAD_MECH, GSSException.FAILURE
См. также:
GSSName.canonicalize(Oid), GSSName.NT_EXPORT_NAME

createCredential

public abstract GSSCredential createCredential(int usage)
                                        throws GSSException

Метод-фабрика для получения учетных данных по умолчанию. Это заставит GSS-API использовать системные значения по умолчанию для набора механизмов, имени и срока действия.

Поставщики механизмов GSS-API должны наложить локальную политику контроля доступа на вызывающие стороны, чтобы предотвратить несанкционированный доступ к учетным данным, на которые они не имеют права. Виды разрешений, необходимые различным поставщикам механизмов, будут документированы для каждого механизма. Неудачная проверка разрешений может вызвать исключение SecurityException из этого метода.

Параметры:
usage - предполагаемое использование этого объекта учетных данных. Значение этого параметра должно быть одним из: GSSCredential.INITIATE_AND_ACCEPT, GSSCredential.ACCEPT_ONLY и GSSCredential.INITIATE_ONLY.
Возвращает:
GSSCredential заданного типа.
Выбрасывает:
GSSException - содержащий следующие основные коды ошибок: GSSException.BAD_MECH, GSSException.BAD_NAMETYPE, GSSException.BAD_NAME, GSSException.CREDENTIALS_EXPIRED, GSSException.NO_CRED, GSSException.FAILURE
См. также:
GSSCredential

createCredential

public abstract GSSCredential createCredential(GSSName name,
                                               int lifetime,
                                               Oid mech,
                                               int usage)
                                        throws GSSException

Метод-фабрика для получения учетных данных одного механизма.

Поставщики механизмов GSS-API должны наложить локальную политику контроля доступа на вызывающие стороны, чтобы предотвратить несанкционированный доступ к учетным данным, на которые у них нет прав. Виды разрешений, необходимые различным поставщикам механизмов, будут документированы для каждого механизма. Неуспешная проверка разрешений может привести к тому, что метод бросит исключение SecurityException.

Значения времени жизни, отличные от стандартных, не всегда могут быть учтены базовыми механизмами, поэтому приложения должны быть готовы вызывать метод getRemainingLifetime для полученных учетных данных.

Параметры:
name - имя принципала, для которого необходимо получить учетные данные. Используйте null для указания принципала по умолчанию.
lifetime - количество секунд, в течение которых учетные данные должны оставаться действительными. Используйте GSSCredential.INDEFINITE_LIFETIME для запроса максимального допустимого времени жизни учетных данных. Используйте GSSCredential.DEFAULT_LIFETIME для запроса стандартного времени жизни учетных данных.
mech - Oid желаемого механизма. Используйте (Oid) null для запроса механизма по умолчанию.
usage - предполагаемое использование этого объекта учетных данных. Значение этого параметра должно быть одним из: GSSCredential.INITIATE_AND_ACCEPT, GSSCredential.ACCEPT_ONLY и GSSCredential.INITIATE_ONLY.
Возвращает:
объект GSSCredential запрошенного типа.
Исключения:
GSSException - содержащий следующие основные коды ошибок: GSSException.BAD_MECH, GSSException.BAD_NAMETYPE, GSSException.BAD_NAME, GSSException.CREDENTIALS_EXPIRED, GSSException.NO_CRED, GSSException.FAILURE
См. также:
GSSCredential

createCredential

public abstract GSSCredential createCredential(GSSName name,
                                               int lifetime,
                                               Oid[] mechs,
                                               int usage)
                                        throws GSSException

Метод-фабрика для получения учетных данных по набору механизмов. Этот метод пытается получить учетные данные для каждого из механизмов, указанных в массиве mechs. Чтобы определить список механизмов, для которых получение учетных данных прошло успешно, вызывающая сторона должна использовать метод GSSCredential.getMechs.

Поставщики механизмов GSS-API должны наложить локальную политику контроля доступа на вызывающие стороны, чтобы предотвратить несанкционированный доступ к учетным данным, на которые у них нет прав. Виды разрешений, необходимые различным поставщикам механизмов, будут документированы для каждого механизма. Неуспешная проверка разрешений может привести к тому, что метод бросит исключение SecurityException.

Значения времени жизни, отличные от стандартных, не всегда могут быть учтены базовыми механизмами, поэтому приложения должны быть готовы вызывать метод getRemainingLifetime для полученных учетных данных.

Параметры:
name - имя принципала, для которого необходимо получить учетные данные. Используйте null для указания принципала по умолчанию.
lifetime - количество секунд, в течение которых учетные данные должны оставаться действительными. Используйте GSSCredential.INDEFINITE_LIFETIME для запроса максимального допустимого времени жизни учетных данных. Используйте GSSCredential.DEFAULT_LIFETIME для запроса стандартного времени жизни учетных данных.
mechs - массив Oid, указывающий механизмы, для которых необходимо получить учетные данные. Используйте (Oid[]) null для запроса набора механизмов по умолчанию, специфичных для системы.
usage - предполагаемое использование этого объекта учетных данных. Значение этого параметра должно быть одним из: GSSCredential.INITIATE_AND_ACCEPT, GSSCredential.ACCEPT_ONLY и GSSCredential.INITIATE_ONLY.
Возвращает:
объект GSSCredential запрошенного типа.
Исключения:
GSSException - содержащий следующие основные коды ошибок: GSSException.BAD_MECH, GSSException.BAD_NAMETYPE, GSSException.BAD_NAME, GSSException.CREDENTIALS_EXPIRED, GSSException.NO_CRED, GSSException.FAILURE
См. также:
GSSCredential

createContext

public abstract GSSContext createContext(GSSName peer,
                                         Oid mech,
                                         GSSCredential myCred,
                                         int lifetime)
                                  throws GSSException

Метод-фабрика для создания контекста со стороны инициатора. Некоторые поставщики механизмов могут потребовать, чтобы вызывающая сторона имела разрешение на инициирование контекста безопасности. Неуспешная проверка разрешений может привести к тому, что метод бросит исключение SecurityException.

Значения времени жизни, отличные от стандартных, не всегда могут быть учтены базовым механизмом, поэтому приложения должны быть готовы вызывать метод getLifetime для возвращенного контекста.

Параметры:
peer - имя целевого узла.
mech - Oid желаемого механизма. Используйте null для запроса механизма по умолчанию.
myCred - учетные данные инициатора. Используйте null для работы с принципалом-инициатором по умолчанию.
lifetime - время жизни, в секундах, запрашиваемое для контекста. Используйте GSSContext.INDEFINITE_LIFETIME для запроса максимального допустимого времени жизни контекста. Используйте GSSContext.DEFAULT_LIFETIME для запроса стандартного времени жизни контекста.
Возвращает:
неустановленный GSSContext
Исключения:
GSSException - содержащий следующие основные коды ошибок: GSSException.NO_CRED GSSException.CREDENTIALS_EXPIRED GSSException.BAD_NAMETYPE GSSException.BAD_MECH GSSException.FAILURE
См. также:
GSSContext

createContext

public abstract GSSContext createContext(GSSCredential myCred)
                                  throws GSSException

Метод-фабрика для создания контекста со стороны акцептора. Свойства контекста будут определяться входным токеном, переданным в метод accept. Некоторые поставщики механизмов могут потребовать, чтобы вызывающая сторона имела разрешение на принятие контекста безопасности. Неуспешная проверка разрешений может привести к тому, что метод бросит исключение SecurityException.

Параметры:
myCred - учетные данные акцептора. Используйте null для работы с принципалом-акцептором по умолчанию.
Возвращает:
неустановленный GSSContext
Исключения:
GSSException - содержащий следующие основные коды ошибок: GSSException.NO_CRED GSSException.CREDENTIALS_EXPIRED GSSException.BAD_MECH GSSException.FAILURE
См. также:
GSSContext

createContext

public abstract GSSContext createContext(byte[] interProcessToken)
                                  throws GSSException

Метод-фабрика для создания ранее экспортированного контекста. Свойства контекста будут определяться входным токеном и не могут быть изменены с помощью методов set.

Реализации не обязаны поддерживать межпроцессную передачу контекстов безопасности. Перед экспортом контекста вызов метода GSSContext.isTransferable укажет, можно ли передать контекст. Вызов этого метода в реализации, которая его не поддерживает, приведет к исключению GSSException с кодом ошибки GSSException.UNAVAILABLE. Некоторые поставщики механизмов могут потребовать, чтобы вызывающая сторона имела разрешение на инициирование или принятие контекста безопасности. Неуспешная проверка разрешений может привести к тому, что метод бросит исключение SecurityException.

Параметры:
interProcessToken - токен, ранее выданный методом export.
Возвращает:
ранее установленный GSSContext
Исключения:
GSSException - содержащий следующие основные коды ошибок: GSSException.NO_CONTEXT, GSSException.DEFECTIVE_TOKEN, GSSException.UNAVAILABLE, GSSException.UNAUTHORIZED, GSSException.FAILURE
См. также:
GSSContext

addProviderAtFront

public abstract void addProviderAtFront(Provider p,
                                        Oid mech)
                                 throws GSSException

Этот метод используется для указания GSSManager, что приложение желает, чтобы определённый поставщик использовался перед всеми остальными при необходимости поддержки данного механизма. Если в качестве механизма используется значение null вместо Oid, GSSManager должен использовать указанный поставщик перед всеми остальными, независимо от механизма. Лишь когда указанный поставщик не поддерживает необходимый механизм, GSSManager переходит к другому поставщику.

Повторный вызов этого метода сохраняет более старые настройки, но понижает их в приоритете, тем самым формируя упорядоченный список пар поставщик и Oid, который растёт сверху.

Вызов addProviderAtFront со значением null Oid удалит все предыдущие настройки для этого поставщика в экземпляре GSSManager. Вызов addProviderAtFront с ненулевым значением Oid удалит любые предыдущие настройки, установленные с использованием этого механизма и этого поставщика вместе.

Если реализация GSSManager не поддерживает SPI с архитектурой подключаемого поставщика, она должна сгенерировать GSSException со статусом GSSException.UNAVAILABLE, чтобы указать, что операция недоступна.

Предположим, что приложение желает, чтобы поставщик A всегда проверялся первым при необходимости любого механизма, тогда оно вызовет:

GSSManager mgr = GSSManager.getInstance();
         // mgr may at this point have its own pre-configured list
         // of provider preferences. The following will prepend to
         // any such list:

         mgr.addProviderAtFront(A, null);
Теперь, если оно также желает, чтобы механизм Oid m1 всегда получался от поставщика B перед проверкой ранее установленного A, оно вызовет:
mgr.addProviderAtFront(B, m1);
GSSManager в первую очередь проверит B, если нужен m1. В случае, если B не поддерживает m1, GSSManager продолжит проверку A. Если необходим любой механизм m2, отличный от m1, то GSSManager пропустит B и проверит A напрямую.

Предположим, что в более позднее время будет сделан следующий вызов для того же экземпляра GSSManager:

mgr.addProviderAtFront(B, null)
тогда предыдущая настройка с парой (B, m1) будет подсуммирована этим и должна быть удалена. В результате список предпочтений теперь станет {(B, null), (A, null), ... //последующий предопределённый список.

Обратите внимание, что следующий вызов:

mgr.addProviderAtFront(A, m3)
не подсуммирует предыдущую настройку (A, null), и список фактически станет {(A, m3), (B, null), (A, null), ...}
Параметры:
p - экземпляр поставщика, который должен использоваться всякий раз, когда требуется поддержка mech.
mech - механизм, для которого устанавливается поставщик
Исключения:
GSSException - содержащий следующие основные коды ошибок: GSSException.UNAVAILABLE, GSSException.FAILURE

addProviderAtEnd

public abstract void addProviderAtEnd(Provider p,
                                      Oid mech)
                               throws GSSException

Этот метод используется для указания GSSManager, что приложение желает использовать определённого поставщика, если ни один другой поставщик не может быть найден, который поддерживает данный механизм. Если в качестве механизма используется значение null вместо Oid, GSSManager должен использовать указанный поставщик для любого механизма.

Повторный вызов этого метода сохраняет более старые настройки, но поднимает их выше новых в списке предпочтений, таким образом формируя упорядоченный список пар поставщик и Oid, который растёт снизу. Поэтому более старые настройки поставщика будут использоваться в первую очередь, прежде чем будет использован этот.

Если есть какие-либо ранее существующие настройки, которые конфликтуют с настройкой, устанавливаемой здесь, то GSSManager должен проигнорировать этот запрос.

Если реализация GSSManager не поддерживает SPI с архитектурой подключаемых поставщиков, она должна выбросить GSSException со статусом GSSException.UNAVAILABLE, чтобы указать, что операция недоступна.

Предположим, что приложение желает, чтобы при необходимости механизма Oid m1, системные поставщики по умолчанию всегда проверялись в первую очередь, и только если они не поддерживают m1, должен проверяться поставщик A. Тогда оно сделает вызов:

GSSManager mgr = GSSManager.getInstance();
         mgr.addProviderAtEnd(A, m1);
Теперь, если оно также желает, чтобы для всех механизмов поставщик B проверялся после проверки всех настроенных поставщиков, оно вызовет:
mgr.addProviderAtEnd(B, null);
В результате список предпочтений теперь станет {..., (A, m1), (B, null)}.

Предположим, что в более позднее время будет сделан следующий вызов для того же экземпляра GSSManager:

mgr.addProviderAtEnd(B, m2)
тогда предыдущая настройка с парой (B, null) подсуммирует это, и поэтому этот запрос должен быть проигнорирован. То же самое произойдёт, если будет сделан запрос для уже существующих пар (A, m1) или (B, null).

Обратите внимание, что следующий вызов:

mgr.addProviderAtEnd(A, null)
не подсуммируется предыдущей настройкой (A, m1), и список фактически станет {..., (A, m1), (B, null), (A, null)}
Параметры:
p - экземпляр поставщика, который должен использоваться всякий раз, когда требуется поддержка mech.
mech - механизм, для которого устанавливается поставщик
Исключения:
GSSException - содержащий следующие основные коды ошибок: GSSException.UNAVAILABLE, GSSException.FAILURE

© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.security.jgss/org/ietf/jgss/GSSManager.html

Spec-Zone .ru
спецификации, руководства, описания, API