Java 權限參考資料

您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件。
info

Java 權限政策有知情必要事項

如果您要開發 Java Callout 政策,必須瞭解 Edge JVM 中生效的權限政策,以及這些政策對程式碼的影響。舉例來說,您的自訂 Java 程式碼無法無限制存取檔案系統。不過,如果是檔案系統存取權,您可以讀取特定檔案,例如政策資源檔案。但大多數其他檔案系統存取權都會遭到封鎖。本主題列出所有 JDK 權限類型,以及各自的目標或動作。 針對每個目標或動作,我們會指定權限政策和您需要瞭解的任何例外狀況。

如要進一步瞭解 JDK 權限類型和各項權限允許執行的操作,請參閱「Java 開發套件 (JDK) 中的權限」。

啟用安全限制

在 Edge for Private Cloud 中,安全限制預設為停用。這表示自訂 Java 呼叫程式碼可以存取所有資源,不受限制。如要在 Edge for Private Cloud 安裝中啟用安全限制,請按照下列程序操作:

  1. 在第一個訊息處理器節點上,使用編輯器開啟 $APIGEE_ROOT/customer/application/message-processor.properties 檔案。如果檔案不存在,請建立該檔案。
  2. 在檔案中新增下列這行文字:
    conf_security-policy_enable.security.manager=true
  3. Save the file and ensure the file is owned by the apigee user:
    chown apigee:apigee $APIGEE_ROOT/customer/application/message-processor.properties
  4. 重新啟動訊息處理器:
    apigee-service message-processor restart
  5. 對其餘所有訊息處理器重複執行這些步驟。
權限類型 目標或動作名稱 已授予權限
java.awt.AWTPermission
accessClipboard 否
accessEventQueue 否
accessSystemTray 否
createRobot 否
fullScreenExclusive 否
listenToAllAWTEvents 否
readDisplayPixels 否
replaceKeyboardFocusManager 否
setAppletStub 否
setWindowsAlwaysOnTop 否
showWindowWithoutWarningBanner 否
toolkitModality 否
watchMousePointer 否
java.io.FilePermission

java.io.FilePermission 代表檔案或目錄的存取權。FilePermission 包含路徑名稱和一組適用於該路徑名稱的動作。
讀取 可以,但須遵守相關限制。請參閱「限制」。
寫入 否
execute 否
刪除 否
readLink 是
java.io.SerializablePermission

SerializablePermission 包含名稱 (也稱為「目標名稱」),但不包含動作清單;您要麼擁有具名權限,要麼沒有。
enableSubclassImplementation 是
enableSubstitution 否
java.lang.management.ManagementPermission

Java 平台管理介面中定義的方法
控管 否
monitor 否
java.lang.reflect.ReflectPermission

適用於反射作業。ReflectPermission 是具名權限,沒有任何動作
suppressAccessChecks 否
newProxyInPackage.{package name} 否
java.lang.RuntimePermission

包含名稱 (也稱為「目標名稱」),但不含動作清單;您要麼擁有具名權限,要麼沒有。
createClassLoader 否
getClassLoader 是
setContextClassLoader 是
enableContextClassLoaderOverride 是
closeClassLoader 否
setSecurityManager 否
createSecurityManager 否
getenv.{variable name} 否
exitVM.{exit status} 否
shutdownHooks 否
setFactory 否
setIO 否
modifyThread 是
stopThread 是
modifyThreadGroup 是
getProtectionDomain 是
getFileSystemAttributes 否
readFileDescriptor 是
writeFileDescriptor 否
loadLibrary.{library name} 否
accessClassInPackage。{package name} 是
defineClassInPackage。{package name} 否
accessDeclaredMembers NO
queuePrintJob 否
getStackTrace 否
setDefaultUncaughtExceptionHandler 否
偏好設定 否
usePolicy 否
java.net.NetPermission

NetPermission 包含名稱,但不含動作清單;您要麼擁有具名權限, 要麼沒有。
setDefaultAuthenticator 否
requestPasswordAuthentication 否
specifyStreamHandler 是
setProxySelector 否
getProxySelector 否
setCookieHandler 否
getCookieHandler 否
setResponseCache 否
getResponseCache 否
getNetworkInformation 否
java.net.SocketPermission

代表透過通訊端存取網路。SocketPermission 包含主機規格和一組「動作」,用於指定連線至該主機的方式。
host = (hostname | IPaddress)[:portrange]
portrange = portnumber | -portnumber | portnumber-[portnumber]

連線至主機的方式有:

accept
connect
listen
resolve

只有搭配「localhost」使用時,「listen」動作才有意義。如果存在任何其他動作,系統會隱含「resolve」(解析主機/IP 名稱服務查詢) 動作。
解析 是
連線

可以,但須遵守相關限制。請參閱「限制」。

Apigee 會限制存取 sitelocal、anylocal、迴路和 linklocal 位址。

聆聽、
接受
否
java.net.URLPermission

表示存取資源或一組資源的權限 (由指定網址定義),以及一組使用者可設定的要求方法和要求標頭。權限名稱是網址字串。動作字串是要求方法和標頭的串連。這個類別不會限制方法和標頭名稱的範圍。
是
LinkPermission

連結建立作業的權限類別。
困難 否
符號 否
java.security.SecurityPermission

SecurityPermission 包含名稱 (也稱為「目標名稱」),但不包含動作清單;您要麼擁有具名權限,要麼沒有。
目標名稱是安全性設定參數的名稱 (請參閱下文)。目前 SecurityPermission 物件用於保護對 Policy、Security、Provider、Signer 和 Identity 物件的存取權。
createAccessControlContext 否
getDomainCombiner 否
getPolicy 否
setPolicy 否
createPolicy.{policy type} 否
getProperty.{key} 否
setProperty.{key} 否
insertProvider 否
removeProvider.{provider name} 否
clearProviderProperties.{provider name} 否
putProviderProperty.{provider name} 否
removeProviderProperty.{provider name} 否
SQLPermission setLog 否
callAbort 否
setSyncFactory 否
setNetworkTimeout 否
deregisterDriver 否
java.util.logging.LoggingPermission

當使用 SecurityManager 執行的程式碼呼叫其中一個記錄控制方法 (例如 Logger.setLevel) 時,SecurityManager 會檢查 java.util.logging.LoggingPermission 物件。
控管 否
java.util.PropertyPermission
名稱是屬性的名稱 (例如「java.home」、「os.name」等)。命名慣例遵循階層式屬性命名慣例。此外,名稱結尾也可能出現星號,或星號本身,表示萬用字元相符。舉例來說,「java.*」或「*」是有效值,「*java」或「a*b」則無效。

要授予的動作會以字串形式傳遞至建構函式,其中包含以半形逗號分隔的零或多個關鍵字清單。
讀取 是
寫入 否
javax.xml.ws.WebServicePermission
publishEndpoint 否
javax.xml.bind.JAXBPermission setDatatypeConverter 否
javax.sound.sampled.AudioPermission

音訊系統資源的存取權。
播放 否
record 否
javax.security.auth.PrivateCredentialPermission

Protect access to private Credentials belonging to a particular Subject. 主體是由一組主體表示。這項權限的目標名稱會指定憑證類別名稱和主體集。這項權限動作的唯一有效值為「read」。
CredentialClass {PrincipalClass "PrincipalName"}* 否
javax.security.auth.kerberos.ServicePermission

保護 Kerberos 服務,以及存取這些服務所需的憑證。
執行 否
接受 否
javax.security.auth.kerberos.DelegationPermission

用於限制 Kerberos 委派模型的用途,也就是可轉送和可代理的票證。

這項權限的目標名稱會指定一對 Kerberos 服務主體。第一個是受託使用授予票券 (TGT) 的下層服務主體。第二個服務主體會指定從屬服務主體代表啟動 KerberosPrincipal 互動的目標服務。
執行 否
接受 否
javax.security.auth.AuthPermission

目前 AuthPermission 物件用於保護 Subject、 SubjectDomainCombiner、LoginContext 和 Configuration 物件的存取權。
doAs 否
doAsPrivileged 否
getSubject 否
getSubjectFromDomainCombiner 否
setReadOnly 否
modifyPrincipals 否
modifyPublicCredentials 否
modifyPrivateCredentials 否
refreshCredential 否
destroyCredential 否
createLoginContext.{name} 否
getLoginConfiguration 否
setLoginConfiguration 否
createLoginConfiguration.{configuration type} 否
refreshLoginConfiguration 否
javax.net.ssl.SSLPermission
setHostnameVerifier 否
getSSLSessionContext 否
setDefaultSSLContext 否
javax.management.MBeanPermission

控制 MBeanServer 作業存取權的權限。如果已使用 System.setSecurityManager(java.lang.SecurityManager) 設定安全管理員,MBeanServer 上的大多數作業都要求呼叫端的權限必須包含適用於該作業的 MBeanPermission。

action className#member[objectName]

如果您有 MBeanPermission,只有在四個項目都相符時,才能執行作業。
addNotificationListener 否
getAttribute 否
getClassLoader 否
getClassLoaderFor 否
getClassLoaderRepository 否
getDomains 否
getMBeanInfo 否
getObjectInstance 否
執行個體化 否
叫用 否
isInstanceOf 否
queryMBeans 否
queryNames 否
registerMBean 否
removeNotificationListener 否
setAttribute 否
unregisterMBean 否
javax.management.MBeanServerPermission
createMBeanServer 否
findMBeanServer 否
newMBeanServer 否
releaseMBeanServer 否
javax.management.MBeanTrustPermission

這項權限代表簽署者或程式碼庫中的「信任」。
register 否
* 否
javax.management.remote.SubjectDelegationPermission
否