JavaTM 2 Platform
Standard Ed. 6

org.ietf.jgss
類別 GSSManager

java.lang.Object
  繼承者 org.ietf.jgss.GSSManager

public abstract class GSSManager
extends Object

此類別作為其他重要 GSS-API 類別的處理器,並且還提供有關受支持的機制的資訊。它可以創建實作以下三個 GSS-API 介面的類別的實例:GSSNameGSSCredentialGSSContext。它還具有一些查詢可用的機制列表和每個機制支持的名稱型別的方法。

預設的 GSSManager 子類別的實例可以通過靜態方法 getInstance 獲取,但應用程序可以隨意實例化 GSSManager 的其他字類別。除其他機制外,預設的 GSSManager 實例還支持 Kerberos v5 GSS-API 機制。此機制由 Oid "1.2.840.113554.1.2.2" 標識,並在 RFC 1964 中定義。

擴展 GSSManager 抽象類別的子類別可以實作為基於模組化的提供者層,該層可利用一些人們熟知的服務提供者規範。GSSManager API 允許應用程序設置此類別實作的首選的提供者。這些方法還允許實作拋出經過定義明確的異常,以防基於提供者的配置不受支持。那些希望移植的應用程序必須意識到這一點,並能夠通過捕獲異常進行徹底恢復。

預計將有三種使用提供者的最常見方法:

  1. 應用程序並不關心使用什麼提供者(預設情況下)。
  2. 應用程序希望優先使用特定的提供者,或者針對特定的機制,或者始終如此,與機制無關。
  3. 應用程序希望盡可能使用本地配置的提供者,但是,如果失去了對一個或多個機制的支持,則應用程序就會回調它自己的提供者。

GSSManager 類別有兩種支持這些使用網要的方法:addProviderAtFrontaddProviderAtEnd。這兩種方法可以創建 <provider, oid> 對的有序列表,其中的每個對都指示指定 oid 的一個首選提供者。

需要注意的一點是,在由 GSSManager 創建的不同的 GSS-API 物件之間存在著一定的交互,其中,用於特定機制的提供者可能需要對所有的物件保持一致。例如,如果 GSSCredential 套件含來自機制 m 的提供者 p 中的元素,則通常要將它傳遞給一個將使用機制 m 的提供者 p 的 GSSContext。實作最大可移植性的簡單經驗就是,不要混合從不同的 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)
          創建以前導出的上下文的 Factory 方法。
abstract  GSSContext createContext(GSSCredential myCred)
          為接受端一方創建上下文的 Factory 方法。
abstract  GSSContext createContext(GSSName peer, Oid mech, GSSCredential myCred, int lifetime)
          在初始端一方創建上下文的 Factory 方法。
abstract  GSSCredential createCredential(GSSName name, int lifetime, Oid[] mechs, int usage)
          通過一套機制獲取憑據的 Factory 方法。
abstract  GSSCredential createCredential(GSSName name, int lifetime, Oid mech, int usage)
          獲取單個機制憑據的 Factory 方法。
abstract  GSSCredential createCredential(int usage)
          獲取預設憑據的 Factory 方法。
abstract  GSSName createName(byte[] name, Oid nameType)
          將包含名稱的位元組陣列從指定的名稱空間轉換到 GSSName 物件的 Factory 方法。
abstract  GSSName createName(byte[] name, Oid nameType, Oid mech)
          將包含名稱的字元串陣列從指定的名稱空間轉換到 GSSName 物件並同時針對機制對其進行規範化的 Factory 方法。
abstract  GSSName createName(String nameStr, Oid nameType)
          將字元串名稱從指定的名稱空間轉換到 GSSName 物件的 Factory 方法。
abstract  GSSName createName(String nameStr, Oid nameType, Oid mech)
          將字元串名稱從指定的名稱空間轉換到 GSSName 物件並同時針對機制對其進行規範化的 Factory 方法。
static GSSManager getInstance()
          返回預設的 GSSManager 實作。
abstract  Oid[] getMechs()
          返回一個可通過此 GSSManager 提供給 GSS-API 調用者的機制列表。
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()
返回一個可通過此 GSSManager 提供給 GSS-API 調用者的機制列表。從 getInstance() 方法中獲取的預設 GSSManager 將 Oid "1.2.840.113554.1.2.2" 放在了其列表中。此 Oid 可確定已在 RFC 1964 中定義的 Kerberos v5 GSS-API 機制。

返回:
一些與可用的機制對應的 Oid 物件。當沒有機制可用時(例如正在動態配置機制,並且當前未設置任何機制),將返回 null

getNamesForMech

public abstract Oid[] getNamesForMech(Oid mech)
                               throws GSSException
然後返回由指定的機制所支持的名稱型別。

預設的 GSSManager 實例包括對 Kerberos v5 機制的支持。當指定此機制 ("1.2.840.113554.1.2.2") 時,返回的列表至少將包括以下名稱型別:GSSName.NT_HOSTBASED_SERVICEGSSName.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,包含以下主要錯誤程式碼:{@link - GSSException#UNAVAILABLE GSSException.UNAVAILABLE}、GSSException.FAILURE
GSSException
另請參見:
getMechsForName(Oid)

getMechsForName

public abstract Oid[] getMechsForName(Oid nameType)
返回支持指定的名稱型別的機制的列表。

當指定的名稱型別是 GSSName.NT_HOSTBASED_SERVICEGSSName.NT_EXPORT_NAME 或 "1.2.840.113554.1.2.2.1" 這三者之一時,在此列表中將始終返回 Kerberos v5 機制 ("1.2.840.113554.1.2.2")。

參數:
nameType - 要尋找的名稱型別的 Oid
返回:
一些與支持指定的名稱型別的機制對應的 Oid 物件。當沒有機制支持指定的名稱型別時,將返回 null
另請參見:
getNamesForMech(Oid)

createName

public abstract GSSName createName(String nameStr,
                                   Oid nameType)
                            throws GSSException
將字元串名稱從指定的名稱空間轉換到 GSSName 物件的 Factory 方法。通常,創建的 GSSName 物件包括該名稱的多種表示形式,每個受支持的機制都有一種表示形式;此種情況的兩個例外範例是:名稱空間型別參數指示為 NT_EXPORT_NAME 或 GSS-API 實作不是多機制。建議不要將此方法用於 NT_EXPORT_NAME 型別,因為將以前導出的名稱(由任意位元組構成)表示為 String 可能會導致字元編碼方案問題。在此情形下,建議將位元組直接傳入 createName 這一方法的重載形式。

參數:
nameStr - 表示要創建的名稱的可列印形式的字元串。
nameType - 指定所提供的可列印名稱的名稱空間的 Oid。null 可以用來指定,特定於機制的預設可列印語法應該根據每個檢查 nameStr 的機制進行假定。建議不要將名稱型別 NT_EXPORT_NAME 用於此方法。
返回:
一個表示所指定主體的 GSSName
拋出:
GSSException,包含以下主要錯誤程式碼:{@link - GSSException#BAD_NAMETYPE GSSException.BAD_NAMETYPE}、GSSException.BAD_NAMEGSSException.BAD_MECHGSSException.FAILURE
GSSException
另請參見:
GSSName, GSSName.NT_EXPORT_NAME

createName

public abstract GSSName createName(byte[] name,
                                   Oid nameType)
                            throws GSSException
將包含名稱的位元組陣列從指定的名稱空間轉換到 GSSName 物件的 Factory 方法。通常,創建的 GSSName 物件包括該名稱的多種表示形式,每個受支持的機制都有一種表示形式;此種情況的兩個例外範例是:名稱空間型別參數指示為 NT_EXPORT_NAME 或 GSS-API 實作不是多機制。傳入的位元組將由每種基礎機制根據它所選擇的編碼方案針對指定的命名型別進行解釋。

參數:
name - 套件含要創建的名稱的位元組陣列
nameType - 指定在位元組陣列中提供的名稱的名稱空間的 Oid。null可用來指定,特定於機制的預設可列印語法應該根據每個檢查位元組陣列的機制進行假定。
返回:
一個表示所指定主體的 GSSName
拋出:
GSSException,包含以下主要錯誤程式碼:{@link - GSSException#BAD_NAMETYPE GSSException.BAD_NAMETYPE}、GSSException.BAD_NAMEGSSException.BAD_MECHGSSException.FAILURE
GSSException
另請參見:
GSSName, GSSName.NT_EXPORT_NAME

createName

public abstract GSSName createName(String nameStr,
                                   Oid nameType,
                                   Oid mech)
                            throws GSSException
將字元串名稱從指定的名稱空間轉換到 GSSName 物件並同時針對機制對其進行規範化的 Factory 方法。換句話說,此方法是一種實用程序,它執行以下兩個步驟的等效步驟:首先是 createName,然後是 GSSName.canonicalize

參數:
nameStr - 表示要創建的名稱的可列印形式的字元串。
nameType - 指定所提供的可列印名稱的名稱空間的 Oid。null 可以用來指定,特定於機制的預設可列印語法應該根據每個檢查 nameStr 的機制進行假定。建議不要將名稱型別 NT_EXPORT_NAME 用於此方法。
mech - 指定應該為其規範化名稱的機制的 Oid
返回:
一個表示指定的主體的 GSSName
拋出:
GSSException,包含以下主要錯誤程式碼:{@link - GSSException#BAD_NAMETYPE GSSException.BAD_NAMETYPE}、GSSException.BAD_NAMEGSSException.BAD_MECHGSSException.FAILURE
GSSException
另請參見:
GSSName.canonicalize(Oid), GSSName.NT_EXPORT_NAME

createName

public abstract GSSName createName(byte[] name,
                                   Oid nameType,
                                   Oid mech)
                            throws GSSException
將包含名稱的字元串陣列從指定的名稱空間轉換到 GSSName 物件並同時針對機制對其進行規範化的 Factory 方法。換句話說,此方法是一種實用程序,它執行以下兩個步驟的等效步驟:首先是 createName,然後是 GSSName.canonicalize

參數:
name - 套件含要創建的名稱的位元組陣列
nameType - 指定在位元組陣列中提供的名稱的名稱空間的 Oid。null可用來指定,特定於機制的預設可列印語法應該根據每個檢查位元組陣列的機制進行假定。
mech - 指定應該為其規範化名稱的機制的 Oid
返回:
一個表示指定的主體的 GSSName
拋出:
GSSException,包含以下主要錯誤程式碼:{@link - GSSException#BAD_NAMETYPE GSSException.BAD_NAMETYPE}、GSSException.BAD_NAMEGSSException.BAD_MECHGSSException.FAILURE
GSSException
另請參見:
GSSName.canonicalize(Oid), GSSName.NT_EXPORT_NAME

createCredential

public abstract GSSCredential createCredential(int usage)
                                        throws GSSException
獲取預設憑據的 Factory 方法。這會導致 GSS-API 將特定於系統的預設實作用於機制、名稱和生存期的 set。

GSS-API 機制提供商必須對調用者實施本地存取控制策略施,以防止未經授權的調用者獲取他們無權獲取的憑據。不同機制提供商需要的權限種類別將以機制為單位記錄在文檔中。失敗的權限檢查可能會導致從此方法中拋出 SecurityException

參數:
usage - 此憑據物件的預期用途。此參數的值必須是下列值之一:GSSCredential.INITIATE_AND_ACCEPTGSSCredential.ACCEPT_ONLYGSSCredential.INITIATE_ONLY
返回:
所請求型別的 GSSCredential。
拋出:
GSSException,包含以下主要錯誤程式碼:{@link - GSSException#BAD_MECH GSSException.BAD_MECH}、GSSException.BAD_NAMETYPEGSSException.BAD_NAMEGSSException.CREDENTIALS_EXPIREDGSSException.NO_CREDGSSException.FAILURE
GSSException
另請參見:
GSSCredential

createCredential

public abstract GSSCredential createCredential(GSSName name,
                                               int lifetime,
                                               Oid mech,
                                               int usage)
                                        throws GSSException
獲取單個機制憑據的 Factory 方法。

GSS-API 機制提供商必須對調用者實施本地存取控制策略施,以防止未經授權的調用者獲取他們無權獲取的憑據。不同機制提供商需要的權限種類別將以機制為單位記錄在文檔中。失敗的權限檢查可能會導致從此方法中拋出 SecurityException

生存期的非預設值並不總能得到基礎機制的認可,因此,應用程序必須隨時準備根據返回的憑據調用 getRemainingLifetime

參數:
name - 將為其獲取此憑據的主體的名稱。使用 null 來指定預設的主體。
lifetime - 憑據應該保持有效的秒數。使用 GSSCredential.INDEFINITE_LIFETIME 請求證書具有最大允許生存期。使用 GSSCredential.DEFAULT_LIFETIME 請求預設的憑據生存期。
mech - 所需機制的 Oid。使用 (Oid) null 來請求預設的機制。
usage - 此憑據物件的預期用途。此參數的值必須是下列值之一:GSSCredential.INITIATE_AND_ACCEPTGSSCredential.ACCEPT_ONLYGSSCredential.INITIATE_ONLY
返回:
所請求型別的 GSSCredential。
拋出:
GSSException,包含以下主要錯誤程式碼:{@link - GSSException#BAD_MECH GSSException.BAD_MECH}、GSSException.BAD_NAMETYPEGSSException.BAD_NAMEGSSException.CREDENTIALS_EXPIREDGSSException.NO_CREDGSSException.FAILURE
GSSException
另請參見:
GSSCredential

createCredential

public abstract GSSCredential createCredential(GSSName name,
                                               int lifetime,
                                               Oid[] mechs,
                                               int usage)
                                        throws GSSException
通過一套機制獲取憑據的 Factory 方法。此方法嘗試為在稱為 mechs 的陣列中指定的每個機制獲取憑據。若要確定成功為其獲取憑據的機制列表,調用者應該使用 GSSCredential.getMechs 方法。

GSS-API 機制提供商必須對調用者實施本地存取控制策略施,以防止未經授權的調用者獲取他們無權獲取的憑據。不同機制提供商需要的權限種類別將以機制為單位記錄在文檔中。失敗的權限檢查可能會導致從此方法中拋出 SecurityException

生存期的非預設值並不總能得到基礎機制的認可,因此,應用程序必須隨時準備根據返回的憑據調用 getRemainingLifetime

參數:
name - 將為其獲取此憑據的主體的名稱。使用 null 來指定預設的主體。
lifetime - 憑據應該保持有效的秒數。使用 GSSCredential.INDEFINITE_LIFETIME 請求證書具有最大允許生存期。使用 GSSCredential.DEFAULT_LIFETIME 請求預設的憑據生存期。
mechs - Oid 組成的陣列,指示獲取憑據的機制。使用 (Oid[]) null 請求機制特定於系統的預設 set。
usage - 此憑據物件的預期用途。此參數的值必須是下列值之一:GSSCredential.INITIATE_AND_ACCEPTGSSCredential.ACCEPT_ONLYGSSCredential.INITIATE_ONLY
返回:
所請求型別的 GSSCredential。
拋出:
GSSException,包含以下主要錯誤程式碼:{@link - GSSException#BAD_MECH GSSException.BAD_MECH}、GSSException.BAD_NAMETYPEGSSException.BAD_NAMEGSSException.CREDENTIALS_EXPIREDGSSException.NO_CREDGSSException.FAILURE
GSSException
另請參見:
GSSCredential

createContext

public abstract GSSContext createContext(GSSName peer,
                                         Oid mech,
                                         GSSCredential myCred,
                                         int lifetime)
                                  throws GSSException
在初始端一方創建上下文的 Factory 方法。 有些機制提供商可能會要求調用者授予初始化安全上下文的權限。失敗的權限檢查可能會導致從此方法中拋出 SecurityException

生存期的非預設值並不總能得到基礎機制的認可,因此,應用程序必須隨時準備根據返回的上下文調用 getLifetime

參數:
peer - 目標同位體的名稱。
mech - 所需機制的 Oid。使用 null 來請求預設的機制。
myCred - 初始端的憑據。將 null 用作預設的初始端主體。
lifetime - 為上下文請求的以秒為單位的生存期。使用 GSSContext.INDEFINITE_LIFETIME 請求上下文具有最大允許的生存期。使用 GSSContext.DEFAULT_LIFETIME 請求上下文的預設生存期。
返回:
未創建的 GSSContext
拋出:
GSSException,包含以下主要錯誤程式碼:{@link - GSSException#DEFECTIVE_TOKEN GSSException.DEFECTIVE_TOKEN}、GSSException.BAD_MICGSSException.CONTEXT_EXPIREDGSSException.FAILURE
GSSException
另請參見:
GSSContext

createContext

public abstract GSSContext createContext(GSSCredential myCred)
                                  throws GSSException
為接受端一方創建上下文的 Factory 方法。上下文的屬性將通過提供給 accept 方法的輸入標記來確定。 有些機制提供商可能會要求調用者授予接受安全上下文的權限。失敗的權限檢查可能會導致從此方法中拋出 SecurityException

參數:
myCred - 接受端的憑據。將 null 用作預設的接受端主體。
返回:
未創建的 GSSContext
拋出:
GSSException,包含以下主要錯誤程式碼:{@link - GSSException#DEFECTIVE_TOKEN GSSException.DEFECTIVE_TOKEN}、GSSException.BAD_MICGSSException.CONTEXT_EXPIREDGSSException.FAILURE
GSSException
另請參見:
GSSContext

createContext

public abstract GSSContext createContext(byte[] interProcessToken)
                                  throws GSSException
創建以前導出的上下文的 Factory 方法。上下文屬性將通過輸入標記來確定,並且不能通過 set 方法進行修改。

不要求實作支持安全上下文的進程間的傳輸。在導出文本前,調用 GSSContext.isTransferable 將表示上下文是否可傳輸。在不支持它的實作中調用此方法會導致 GSSException,並帶有錯誤程式碼 GSSException.UNAVAILABLE。 有些機制提供商可能會要求調用者授予初始化或接受安全上下文的權限。失敗的權限檢查可能會導致從此方法中拋出 SecurityException

參數:
interProcessToken - 以前從導出方法中發出的標記。
返回:
以前創建的 GSSContext
拋出:
GSSException,包含以下主要錯誤程式碼:{@link - GSSException#NO_CONTEXT GSSException.NO_CONTEXT}、GSSException.DEFECTIVE_TOKENGSSException.UNAVAILABLEGSSException.UNAUTHORIZEDGSSException.FAILURE
GSSException
另請參見:
GSSContext

addProviderAtFront

public abstract void addProviderAtFront(Provider p,
                                        Oid mech)
                                 throws GSSException
此方法用來向 GSSManager 表示,當支持是指定的機制所需要的支持時,應用程序希望優先於其他所有提供者使用特定的提供者。當將 null (而不是 Oid)一值用於機制時,GSSManager 必須優先於其他提供者而使用指示的提供者,而不管機制是什麼。僅當指示的提供者不支持所需的機制時,才應將 GSSManager 移動到另外的提供者上。

重複調用此方法可以保存較舊的設置,但這會降低它們的優先級,從而在頂端形成一個提供者和 Oid 對有序列表。

調用帶有 null Oid 的 addProviderAtFront 將移除在 GSSManager 實例中為此提供者設置的所有原來的優先級。調用帶有非 null Oid 的 addProviderAtFront 將移除使用此機制和此提供者一起設置的任何原來的優先級。

如果 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);
 
現在,如果它還希望在對原來的 set A 進行檢查之前始終能從提供者 B 中獲取機制 Oid m1,則它將調用:

         mgr.addProviderAtFront(B, m1);
 
這時,如果需要 m1,GSSManager 將首先檢查 B。萬一 B 未提供對 m1 的支持,GSSManager 將繼續檢查 A。如果需要機制 m2(其中 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,包含以下主要錯誤程式碼:{@link - GSSException#UNAVAILABLE GSSException.UNAVAILABLE}、GSSException.FAILURE
GSSException

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,包含以下主要錯誤程式碼:{@link - GSSException#UNAVAILABLE GSSException.UNAVAILABLE}、GSSException.FAILURE
GSSException

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only