Класс GSSManager
public abstract class GSSManager extends Object
GSSName, GSSCredential и GSSContext. Кроме того, он предоставляет методы для получения списка доступных механизмов и типов имён, поддерживаемых каждым механизмом. Экземпляр подкласса GSSManager по умолчанию можно получить с помощью статического метода getInstance, однако приложения могут создавать экземпляры других подклассов GSSManager. Экземпляр GSSManager по умолчанию поддерживает механизм GSS-API Kerberos v5, а также любые другие механизмы. Этот механизм идентифицируется Oid "1.2.840.113554.1.2.2" и определён в RFC 1964.
Подкласс, расширяющий абстрактный класс GSSManager, может быть реализован в виде уровня на основе модульного поставщика, использующего одну из известных спецификаций поставщика служб. API GSSManager позволяет приложению задавать предпочтения поставщиков для такой реализации. Эти методы также позволяют реализации выбрасывать чётко определённое исключение, если конфигурация на основе поставщиков не поддерживается. Приложениям, которым требуется переносимость, следует учитывать это и корректно восстанавливаться, перехватывая исключение.
Предполагается, что поставщики будут использоваться преимущественно тремя способами:
- Приложению неважно, какой поставщик используется (случай по умолчанию).
- Приложение предпочитает использовать определённого поставщика — для конкретного механизма или во всех случаях независимо от механизма.
- Приложение по возможности использует локально настроенных поставщиков, но при отсутствии поддержки одного или нескольких механизмов переключается на собственный поставщик.
Класс GSSManager содержит два метода, позволяющих использовать эти режимы: addProviderAtFront и addProviderAtEnd. Эти методы создают упорядоченный список пар <поставщик, oid>, где каждая пара задаёт предпочтительного поставщика для указанного oid.
Важно отметить, что между различными объектами GSS-API, создаваемыми GSSManager, существуют определённые взаимосвязи: поставщик, используемый для конкретного механизма, может быть одинаковым для всех объектов. Например, если GSSCredential содержит элементы поставщика p для механизма m, его, как правило, следует передавать в GSSContext, который будет использовать поставщика p для механизма m. Простое правило, позволяющее обеспечить максимальную переносимость: не следует смешивать объекты, созданные разными экземплярами GSSManager; если приложение хочет вызвать метод addProviderAtFront для GSSManager, уже создавшего объект, по возможности следует создать другой экземпляр 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
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
GSSManager() |
Конструктор для вызова из подклассов. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract void |
addProviderAtEnd |
Этот метод сообщает GSSManager, что приложение предпочло бы использовать определённого поставщика, если не удастся найти другого поставщика с поддержкой указанного механизма. |
abstract void |
addProviderAtFront |
Этот метод сообщает GSSManager, что приложение предпочло бы использовать определённого поставщика раньше всех остальных, если требуется поддержка указанного механизма. |
abstract GSSContext |
createContext |
Фабричный метод для создания ранее экспортированного контекста. |
abstract GSSContext |
createContext |
Фабричный метод для создания контекста на стороне принимающей стороны. |
abstract GSSContext |
createContext |
Фабричный метод для создания контекста на стороне инициатора. |
abstract GSSCredential |
createCredential |
Фабричный метод для получения учётных данных по умолчанию. |
abstract GSSCredential |
createCredential |
Фабричный метод для получения учётных данных для набора механизмов. |
abstract GSSCredential |
createCredential |
Фабричный метод для получения учётных данных для одного механизма. |
abstract GSSName |
createName |
Фабричный метод для преобразования массива байтов, содержащего имя из указанного пространства имён, в объект GSSName. |
abstract GSSName |
createName |
Фабричный метод для преобразования массива байтов, содержащего имя из указанного пространства имён, в объект GSSName и одновременной канонизации этого имени для механизма. |
abstract GSSName |
createName |
Фабричный метод для преобразования строкового имени из указанного пространства имён в объект GSSName. |
abstract GSSName |
createName |
Фабричный метод для преобразования строкового имени из указанного пространства имён в объект GSSName и одновременной канонизации этого имени для механизма. |
static GSSManager |
getInstance() |
Возвращает реализацию GSSManager по умолчанию. |
abstract Oid[] |
getMechs() |
Возвращает список механизмов, доступных вызывающим GSS-API через этот GSSManager. |
abstract Oid[] |
getMechsForName |
Возвращает список механизмов, поддерживающих указанный тип имени. |
abstract Oid[] |
getNamesForMech |
Возвращает типы имён, поддерживаемые указанным механизмом. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт и возвращает копию этого объекта. |
boolean |
equals |
Указывает, равен ли этот объект другому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии. Финализация устарела и будет удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
String |
toString() |
Возвращает строковое представление объекта. |
final void |
wait() |
Переводит текущий поток в состояние ожидания до пробуждения, обычно в результате вызова notify или interrupt. |
final void |
wait |
Переводит текущий поток в состояние ожидания до пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного промежутка реального времени. |
final void |
wait |
Переводит текущий поток в состояние ожидания до пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного промежутка реального времени. |
Подробное описание конструкторов
GSSManager
public GSSManager()
Подробное описание методов
getInstance
public static GSSManager getInstance()
- Возвращает:
- реализацию GSSManager
getMechs
public abstract Oid[] getMechs()
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_MECHGSSException.FAILURE - См. также:
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. - См. также:
createName
public abstract GSSName createName(String nameStr, Oid nameType) throws GSSException
GSSName будет содержать несколько представлений имени — по одному для каждого поддерживаемого механизма. Исключениями являются случаи, когда параметр типа пространства имен указывает NT_EXPORT_NAME или реализация GSS-API не поддерживает несколько механизмов. Не рекомендуется использовать этот метод с типом NT_EXPORT_NAME, так как представление ранее экспортированного имени, состоящего из произвольных байтов, в виде строки может вызвать проблемы со схемами кодирования символов. В таких случаях рекомендуется передавать байты напрямую в перегруженную форму этого метода createName.- Параметры:
-
nameStr— строка, представляющая печатную форму создаваемого имени. -
nameType— Oid, указывающий пространство имен предоставленного печатного имени.nullможно использовать, чтобы указать, что каждый механизм, анализирующий nameStr, должен предполагать синтаксис печатного представления по умолчанию, специфичный для данного механизма. Не рекомендуется использовать с этим методом тип имени NT_EXPORT_NAME. - Возвращает:
- объект GSSName, представляющий указанный субъект
- Исключения:
-
GSSException— содержит следующие основные коды ошибок:GSSException.BAD_NAMETYPE,GSSException.BAD_NAME,GSSException.BAD_MECH,GSSException.FAILURE - См. также:
createName
public abstract GSSName createName(byte[] name, Oid nameType) throws GSSException
GSSName будет содержать несколько представлений имени — по одному для каждого поддерживаемого механизма. Исключениями являются случаи, когда параметр типа пространства имен указывает NT_EXPORT_NAME или реализация GSS-API не поддерживает несколько механизмов. Переданные байты интерпретируются каждым нижележащим механизмом в соответствии с выбранной им схемой кодирования для указанного типа имени.- Параметры:
-
name— массив байтов, содержащий создаваемое имя -
nameType— Oid, указывающий пространство имен имени, переданного в массиве байтов.nullможно использовать, чтобы указать, что каждый механизм, анализирующий массив байтов, должен предполагать синтаксис по умолчанию, специфичный для данного механизма. - Возвращает:
- объект GSSName, представляющий указанный субъект
- Исключения:
-
GSSException— содержит следующие основные коды ошибок:GSSException.BAD_NAMETYPE,GSSException.BAD_NAME,GSSException.BAD_MECH,GSSException.FAILURE - См. также:
createName
public abstract GSSName createName(String nameStr, Oid nameType, Oid mech) throws GSSException
createName, а затем GSSName.canonicalize.- Параметры:
-
nameStr— строка, представляющая печатную форму создаваемого имени. -
nameType— Oid, указывающий пространство имен предоставленного печатного имени.nullможно использовать, чтобы указать, что каждый механизм, анализирующий nameStr, должен предполагать синтаксис печатного представления по умолчанию, специфичный для данного механизма. Не рекомендуется использовать с этим методом тип имени NT_EXPORT_NAME. -
mech— Oid механизма, для которого следует канонизировать имя - Возвращает:
- объект GSSName, представляющий указанный субъект
- Исключения:
-
GSSException— содержит следующие основные коды ошибок:GSSException.BAD_NAMETYPE,GSSException.BAD_NAME,GSSException.BAD_MECH,GSSException.FAILURE - См. также:
createName
public abstract GSSName createName(byte[] name, Oid nameType, Oid mech) throws GSSException
createName, а затем GSSName.canonicalize.- Параметры:
-
name— массив байтов, содержащий создаваемое имя -
nameType— Oid, указывающий пространство имен имени, переданного в массиве байтов.nullможно использовать, чтобы указать, что каждый механизм, анализирующий массив байтов, должен предполагать синтаксис по умолчанию, специфичный для данного механизма. -
mech— Oid механизма, для которого следует канонизировать имя - Возвращает:
- объект GSSName, представляющий указанный субъект
- Исключения:
-
GSSException— содержит следующие основные коды ошибок:GSSException.BAD_NAMETYPE,GSSException.BAD_NAME,GSSException.BAD_MECH,GSSException.FAILURE - См. также:
createCredential
public abstract GSSCredential createCredential(int usage) throws GSSException
- Параметры:
-
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 - См. также:
createCredential
public abstract GSSCredential createCredential(GSSName name, int lifetime, Oid mech, int usage) throws GSSException
Нижележащие механизмы не всегда могут обеспечить нестандартный срок действия, поэтому приложениям следует быть готовыми вызвать 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 - См. также:
createCredential
public abstract GSSCredential createCredential(GSSName name, int lifetime, Oid[] mechs, int usage) throws GSSException
GSSCredential.getMechs. Нижележащие механизмы не всегда могут обеспечить нестандартный срок действия, поэтому приложениям следует быть готовыми вызвать 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 - См. также:
createContext
public abstract GSSContext createContext(GSSName peer, Oid mech, GSSCredential myCred, int lifetime) throws GSSException
Нижележащий механизм не всегда может обеспечить нестандартный срок действия, поэтому приложениям следует быть готовыми вызвать 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 - См. также:
createContext
public abstract GSSContext createContext(GSSCredential myCred) throws GSSException
- Параметры:
-
myCred— учетные данные акцептора. Используйтеnull, чтобы действовать от имени акцептора по умолчанию. - Возвращает:
- неустановленный GSSContext
- Исключения:
-
GSSException— содержит следующие основные коды ошибок:GSSException.NO_CREDGSSException.CREDENTIALS_EXPIREDGSSException.BAD_MECHGSSException.FAILURE - См. также:
createContext
public abstract GSSContext createContext(byte[] interProcessToken) throws GSSException
Реализации не обязаны поддерживать передачу контекстов безопасности между процессами. Перед экспортом контекста вызов метода GSSContext.isTransferable позволяет определить, можно ли передать контекст. Вызов этого метода в реализации, которая не поддерживает такую возможность, приведет к GSSException с кодом ошибки GSSException.UNAVAILABLE.
- Параметры:
-
interProcessToken— токен, ранее выданный методом export. - Возвращает:
- ранее установленный GSSContext
- Исключения:
-
GSSException— содержит следующие основные коды ошибок:GSSException.NO_CONTEXT,GSSException.DEFECTIVE_TOKEN,GSSException.UNAVAILABLE,GSSException.UNAUTHORIZED,GSSException.FAILURE - См. также:
addProviderAtFront
public abstract void addProviderAtFront(Provider p, Oid mech) throws GSSException
Oid для механизма указано значение null, GSSManager должен использовать указанного поставщика раньше всех остальных независимо от механизма. К другому поставщику GSSManager должен переходить только в том случае, если указанный поставщик не поддерживает требуемый механизм. Повторные вызовы этого метода сохраняют прежние настройки, но понижают их приоритет, формируя упорядоченный список пар «поставщик и Oid», который расширяется в начале.
Вызов addProviderAtFront с нулевым значением 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
Повторные вызовы этого метода сохраняют прежние настройки, но повышают их приоритет по сравнению с более новыми, формируя упорядоченный список пар «поставщик и Oid», который расширяется в конце. Таким образом, прежние настройки поставщиков будут использоваться раньше этой настройки.
Если какие-либо существующие предпочтения конфликтуют с задаваемым предпочтением, GSSManager должен игнорировать этот запрос.
Если реализация GSSManager не поддерживает SPI с подключаемой архитектурой поставщиков, она должна выбросить GSSException с кодом состояния GSSException.UNAVAILABLE, указывающим, что операция недоступна.
Предположим, приложение хочет, чтобы при необходимости механизма с Oid m1 сначала всегда проверялись системные поставщики по умолчанию, а поставщик A проверялся только в том случае, если они не поддерживают m1. Тогда оно выполнит вызов:
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, 2025, 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.