Класс GSSManager
- java.lang.Object
-
- org.ietf.jgss.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 позволяет приложению устанавливать предпочтения поставщика в такой реализации. Эти методы также позволяют реализации генерировать хорошо определённое исключение в случае, если конфигурация на основе поставщика не поддерживается. Приложения, ожидающие быть переносимыми, должны учитывать это и обрабатывать исключение надлежащим образом.
Предполагается, что будут три наиболее распространённых способа использования поставщиков:
- Приложению неважно, какой поставщик используется (стандартный случай).
- Приложение хочет, чтобы определённый поставщик использовался по умолчанию, либо для определённого механизма, либо всегда, независимо от механизма.
- Приложение хочет использовать локально настроенные поставщики по возможности, но если поддержка отсутствует для одного или нескольких механизмов, то оно хочет перейти к своему собственному поставщику.
Класс GSSManager имеет два метода, которые позволяют использовать эти режимы работы: addProviderAtFront и addProviderAtEnd. Эти методы создают упорядоченный список пар <provider, 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(GSSName name,
int lifetime,
Oid[] mechs,
int usage) Метод-фабрика для получения учетных данных по набору механизмов. |
abstract GSSCredential |
createCredential(GSSName name,
int lifetime,
Oid mech,
int usage) Метод-фабрика для получения учетных данных для одного механизма. |
abstract GSSCredential |
createCredential(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 идентифицирует механизм Kerberos v5 GSS-API, определённый в 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_MECHGSSException.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может быть использован для указания того, что каждый механизм, проверяющий имя, должен использовать механизм-специфичный синтаксис по умолчанию. Не рекомендуется использовать тип имени 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может быть использован для указания того, что каждый механизм, проверяющий имя, должен использовать механизм-специфичный синтаксис по умолчанию. Не рекомендуется использовать тип имени 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_CREDGSSException.CREDENTIALS_EXPIREDGSSException.BAD_NAMETYPEGSSException.BAD_MECHGSSException.FAILURE - См. также:
GSSContext
createContext
public abstract GSSContext createContext(GSSCredential myCred)
throws GSSException Метод-фабрика для создания контекста со стороны акцептора. Свойства контекста будут определяться входным токеном, предоставленным методу accept. Некоторые поставщики механизмов могут потребовать, чтобы вызывающая сторона имела разрешение на принятие защищенного контекста. Неудача проверки разрешений может привести к выбрасыванию исключения SecurityException из этого метода.
- Параметры:
-
myCred- учетные данные акцептора. Используйтеnullдля использования принципала-акцептора по умолчанию. - Возвращает:
- неустановленный GSSContext
- Исключения:
-
GSSException- содержащий следующие основные коды ошибок:GSSException.NO_CREDGSSException.CREDENTIALS_EXPIREDGSSException.BAD_MECHGSSException.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 с не-null 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.