|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object org.ietf.jgss.GSSManager
public abstract class GSSManager
此類別作為其他重要 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
抽象類別的子類別可以實作為基於模組化的提供者層,該層可利用一些人們熟知的服務提供者規範。GSSManager
API 允許應用程序設置此類別實作的首選的提供者。這些方法還允許實作拋出經過定義明確的異常,以防基於提供者的配置不受支持。那些希望移植的應用程序必須意識到這一點,並能夠通過捕獲異常進行徹底恢復。
預計將有三種使用提供者的最常見方法:
GSSManager
類別有兩種支持這些使用網要的方法:addProviderAtFront
和 addProviderAtEnd
。這兩種方法可以創建 <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);
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 |
建構子詳細資訊 |
---|
public GSSManager()
方法詳細資訊 |
---|
public static GSSManager getInstance()
public abstract Oid[] getMechs()
getInstance()
方法中獲取的預設 GSSManager 將 Oid "1.2.840.113554.1.2.2" 放在了其列表中。此 Oid 可確定已在 RFC 1964 中定義的 Kerberos v5 GSS-API 機制。
null
值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
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#UNAVAILABLE GSSException.UNAVAILABLE}、GSSException.FAILURE
GSSException
getMechsForName(Oid)
public abstract Oid[] getMechsForName(Oid nameType)
當指定的名稱型別是 GSSName.NT_HOSTBASED_SERVICE
、GSSName.NT_EXPORT_NAME
或 "1.2.840.113554.1.2.2.1" 這三者之一時,在此列表中將始終返回 Kerberos v5 機制 ("1.2.840.113554.1.2.2")。
nameType
- 要尋找的名稱型別的 Oid
null
。getNamesForMech(Oid)
public abstract GSSName createName(String nameStr, Oid nameType) throws GSSException
GSSName
物件包括該名稱的多種表示形式,每個受支持的機制都有一種表示形式;此種情況的兩個例外範例是:名稱空間型別參數指示為 NT_EXPORT_NAME 或 GSS-API 實作不是多機制。建議不要將此方法用於 NT_EXPORT_NAME 型別,因為將以前導出的名稱(由任意位元組構成)表示為 String 可能會導致字元編碼方案問題。在此情形下,建議將位元組直接傳入 createName
這一方法的重載形式。
nameStr
- 表示要創建的名稱的可列印形式的字元串。nameType
- 指定所提供的可列印名稱的名稱空間的 Oid。null
可以用來指定,特定於機制的預設可列印語法應該根據每個檢查 nameStr 的機制進行假定。建議不要將名稱型別 NT_EXPORT_NAME 用於此方法。
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#BAD_NAMETYPE GSSException.BAD_NAMETYPE}、GSSException.BAD_NAME
、GSSException.BAD_MECH
、GSSException.FAILURE
GSSException
GSSName
,
GSSName.NT_EXPORT_NAME
public abstract GSSName createName(byte[] name, Oid nameType) throws GSSException
GSSName
物件包括該名稱的多種表示形式,每個受支持的機制都有一種表示形式;此種情況的兩個例外範例是:名稱空間型別參數指示為 NT_EXPORT_NAME 或 GSS-API 實作不是多機制。傳入的位元組將由每種基礎機制根據它所選擇的編碼方案針對指定的命名型別進行解釋。
name
- 套件含要創建的名稱的位元組陣列nameType
- 指定在位元組陣列中提供的名稱的名稱空間的 Oid。null
可用來指定,特定於機制的預設可列印語法應該根據每個檢查位元組陣列的機制進行假定。
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#BAD_NAMETYPE GSSException.BAD_NAMETYPE}、GSSException.BAD_NAME
、GSSException.BAD_MECH
、GSSException.FAILURE
GSSException
GSSName
,
GSSName.NT_EXPORT_NAME
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
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#BAD_NAMETYPE GSSException.BAD_NAMETYPE}、GSSException.BAD_NAME
、GSSException.BAD_MECH
、GSSException.FAILURE
GSSException
GSSName.canonicalize(Oid)
,
GSSName.NT_EXPORT_NAME
public abstract GSSName createName(byte[] name, Oid nameType, Oid mech) throws GSSException
createName
,然後是 GSSName.canonicalize
。
name
- 套件含要創建的名稱的位元組陣列nameType
- 指定在位元組陣列中提供的名稱的名稱空間的 Oid。null
可用來指定,特定於機制的預設可列印語法應該根據每個檢查位元組陣列的機制進行假定。mech
- 指定應該為其規範化名稱的機制的 Oid
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#BAD_NAMETYPE GSSException.BAD_NAMETYPE}、GSSException.BAD_NAME
、GSSException.BAD_MECH
、GSSException.FAILURE
GSSException
GSSName.canonicalize(Oid)
,
GSSName.NT_EXPORT_NAME
public abstract GSSCredential createCredential(int usage) throws GSSException
GSS-API 機制提供商必須對調用者實施本地存取控制策略施,以防止未經授權的調用者獲取他們無權獲取的憑據。不同機制提供商需要的權限種類別將以機制為單位記錄在文檔中。失敗的權限檢查可能會導致從此方法中拋出 SecurityException
。
usage
- 此憑據物件的預期用途。此參數的值必須是下列值之一:GSSCredential.INITIATE_AND_ACCEPT
、GSSCredential.ACCEPT_ONLY
和 GSSCredential.INITIATE_ONLY
。
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#BAD_MECH GSSException.BAD_MECH}、GSSException.BAD_NAMETYPE
、GSSException.BAD_NAME
、GSSException.CREDENTIALS_EXPIRED
、GSSException.NO_CRED
、GSSException.FAILURE
GSSException
GSSCredential
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
。
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#BAD_MECH GSSException.BAD_MECH}、GSSException.BAD_NAMETYPE
、GSSException.BAD_NAME
、GSSException.CREDENTIALS_EXPIRED
、GSSException.NO_CRED
、GSSException.FAILURE
GSSException
GSSCredential
public abstract GSSCredential createCredential(GSSName name, int lifetime, Oid[] mechs, int usage) throws GSSException
GSSCredential.getMechs
方法。
GSS-API 機制提供商必須對調用者實施本地存取控制策略施,以防止未經授權的調用者獲取他們無權獲取的憑據。不同機制提供商需要的權限種類別將以機制為單位記錄在文檔中。失敗的權限檢查可能會導致從此方法中拋出 SecurityException
。
生存期的非預設值並不總能得到基礎機制的認可,因此,應用程序必須隨時準備根據返回的憑據調用 getRemainingLifetime
。
name
- 將為其獲取此憑據的主體的名稱。使用 null
來指定預設的主體。lifetime
- 憑據應該保持有效的秒數。使用 GSSCredential.INDEFINITE_LIFETIME
請求證書具有最大允許生存期。使用 GSSCredential.DEFAULT_LIFETIME
請求預設的憑據生存期。mechs
- Oid 組成的陣列,指示獲取憑據的機制。使用 (Oid[]) null
請求機制特定於系統的預設 set。usage
- 此憑據物件的預期用途。此參數的值必須是下列值之一:GSSCredential.INITIATE_AND_ACCEPT
、GSSCredential.ACCEPT_ONLY
和 GSSCredential.INITIATE_ONLY
。
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#BAD_MECH GSSException.BAD_MECH}、GSSException.BAD_NAMETYPE
、GSSException.BAD_NAME
、GSSException.CREDENTIALS_EXPIRED
、GSSException.NO_CRED
、GSSException.FAILURE
GSSException
GSSCredential
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
請求上下文的預設生存期。
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#DEFECTIVE_TOKEN GSSException.DEFECTIVE_TOKEN}、GSSException.BAD_MIC
、GSSException.CONTEXT_EXPIRED
、GSSException.FAILURE
GSSException
GSSContext
public abstract GSSContext createContext(GSSCredential myCred) throws GSSException
SecurityException
。
myCred
- 接受端的憑據。將 null
用作預設的接受端主體。
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#DEFECTIVE_TOKEN GSSException.DEFECTIVE_TOKEN}、GSSException.BAD_MIC
、GSSException.CONTEXT_EXPIRED
、GSSException.FAILURE
GSSException
GSSContext
public abstract GSSContext createContext(byte[] interProcessToken) throws GSSException
不要求實作支持安全上下文的進程間的傳輸。在導出文本前,調用 GSSContext.isTransferable
將表示上下文是否可傳輸。在不支持它的實作中調用此方法會導致 GSSException
,並帶有錯誤程式碼 GSSException.UNAVAILABLE
。
有些機制提供商可能會要求調用者授予初始化或接受安全上下文的權限。失敗的權限檢查可能會導致從此方法中拋出 SecurityException
。
interProcessToken
- 以前從導出方法中發出的標記。
GSSException,包含以下主要錯誤程式碼:{@link
- GSSException#NO_CONTEXT GSSException.NO_CONTEXT}、GSSException.DEFECTIVE_TOKEN
、GSSException.UNAVAILABLE
、GSSException.UNAUTHORIZED
、GSSException.FAILURE
GSSException
GSSContext
public abstract void addProviderAtFront(Provider p, Oid mech) throws GSSException
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
public abstract void addProviderAtEnd(Provider p, Oid mech) throws GSSException
重複調用此方法可以保存較舊的設置,但這會使它們的優先級高於新的設置,從而在底端形成一個提供者和 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。