Java 权限参考文档

您正在查看的是 Apigee Edge 文档。
转到 Apigee X 文档
信息

关于 Java 权限政策,您需要了解哪些信息?

如果您要开发 Java 调用程序政策,则需要知道哪些权限政策在 Edge JVM 中有效,以及这些政策将如何影响您的代码。例如,您的自定义 Java 代码对文件系统不具备不受限制的访问权限。但在访问文件系统时,您可以读取某些文件,例如政策资源文件。但大多数其他文件系统的访问都会被禁止。本主题列出了所有 JDK 权限类型及其各自的目标或操作。对于每个目标或操作,我们都会指定权限政策以及您需要了解的任何例外情况。

如需详细了解 JDK 权限类型以及各权限所允许的内容,请参阅 Java 开发工具包 (JDK) 中的权限

启用安全限制

在适用于私有云的 Edge 中,安全限制默认处于停用状态。这意味着,您的自定义 Java 调用程序代码可以访问所有资源,而不受任何限制。如需在 Edge 中为 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 包含一个路径名和一组适用于该路径名的操作。
read 是,但存在限制。请参阅限制
write
execute
删除
readLink
java.io.SerializablePermission

SerializablePermissions 包含一个名称(也称为“目标名称”),但不包含操作列表;您拥有命名权限或没有权限。
enableSubclassImplementation
enableSubstitution
java.lang.management.ManagementPermission

在 Java 平台的管理界面中定义的方法
control
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
queuePrintJob
getStackTrace
setDefaultUncaughtExceptionHandler
preferences
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

“listen”操作只有在与“localhost”配合使用时才有意义。如果存在任何其他操作,则已暗含“resolve”(解析主机/IP 名称服务查找)操作。
resolve
沟通

是,但存在限制。请参阅限制

Apigee 会限制对 sitelocal、anylocal、loopback 和 linklocal 地址的访问。

listen,
accept
java.net.URLPermission

表示有权访问由指定网址定义的一个资源或一组资源,以及指定的一组用户可设置的请求方法和请求标头。权限的名称是网址字符串。操作字符串是请求方法与标头的串联。方法和标头名称的范围不受该类的限制。
LinkPermission

适用于链接创建操作的权限类。
hard
symbolic
java.security.SecurityPermission

SecurityPermission 包含一个名称(也称为“目标名称”),但不包含操作列表;您拥有命名权限或没有权限。
目标名称是安全配置参数的名称(见下文)。目前,SecurityPermission 对象用于保护对政策、安全、提供商、签署者和身份等对象的访问。
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 对象。
control
java.util.PropertyPermission
该名称是属性的名称(例如“java.home”“os.name”等)。命名惯例遵循分层属性命名惯例。此外,名称的末尾可能会显示一个星号(显示在“.”之前),它或单独的星号表示通配符匹配。例如:“java.*”或“*”是有效的,“*java”或“a*b”是无效的。

将要授权的操作传递到字符串中的构造函数,该字符串包含零个或多个以英文逗号分隔的关键字列表。
read
write
javax.xml.ws.WebServicePermission
publishEndpoint
javax.xml.bind.JAXBPermission setDatatypeConverter
javax.sound.sampled.AudioPermission

对音频系统资源的访问权限。
play
record
javax.security.auth.PrivateCredentialPermission

保护对属于特定主题的专用凭据的存取权限。主题由一组主体表示。此权限的目标名称指定了凭据类名称和一组主体。此权限操作的唯一有效值是“read”。
CredentialClass {PrincipalClass "PrincipalName"}*
javax.security.auth.kerberos.ServicePermission

保护 Kerberos 服务以及访问这些服务所需的凭据。
initiate
accept
javax.security.auth.kerberos.DelegationPermission

用于限制 Kerberos 授权模型(例如可转发和可代理的票证)的使用。

此权限的目标名称指定了一对 Kerberos 服务主体。第一个主体是授权使用票证授予票证 (TGT) 的从属服务主体。第二个服务主体指定从属服务主体代表起始 Kerberos 主体进行互动的目标服务。
initiate
accept
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 执行的大多数操作都要求调用者的权限暗含适合该操作的 MBePermission。

action className#member[objectName]

如果您拥有 MBeanPermission,则仅当以下全部四项都匹配时才允许操作。
addNotificationListener
getAttribute
getClassLoader
getClassLoaderFor
getClassLoaderRepository
getDomains
getMBeanInfo
getObjectInstance
instantiate
invoke
isInstanceOf
queryMBeans
queryNames
registerMBean
removeNotificationListener
setAttribute
unregisterMBean
javax.management.MBeanServerPermission
createMBeanServer
findMBeanServer
newMBeanServer
releaseMBeanServer
javax.management.MBeanTrustPermission

此权限表示签署者或代码库中的“信任”。
register
*
javax.management.remote.SubjectDelegationPermission