app.policy 文件许可权
Java™ 2 安全性使用若干策略文件,为每个 Java 程序确定授予的许可权。下列文件中所包含的许可权并集适用于 WebSphere® Application Server 企业应用程序。此并集确定被授予的许可权。
要获取 WebSphere Application Server 支持的可用策略文件列表,请参阅有关 Java 2 安全性策略文件的主题。app.policy 文件是所有 WebSphere Application Server 企业应用程序共享的缺省策略文件。下列文件中所包含的许可权并集适用于 WebSphere Application Server 企业应用程序:
- java.security 文件的 policy.url.* 属性中指定的所有策略文件。
- app.policy 文件,它由配置和文件复制服务管理。
- server.policy 文件。
- java.policy 文件。
- 应用程序 was.policy 文件。
- ra.xml 文件的许可权规范。
- 共享库,其为 library.policy 文件。
在这些文件中进行的更改将复制到 WebSphere Application Server Network Deployment 单元中的其他节点。
在 WebSphere Application Server 中,处理线程的应用程序必须具有 was.policy 或 app.policy 文件中所指定的适当线程许可权。如果未指定线程许可权,应用程序就无法处理线程,并且 WebSphere Application Server 将生成 java.security.AccessControlException 异常。如果管理员将线程许可权添加到 app.policy 文件,那么许可权更改需要重新启动 WebSphere Application Server。管理员必须将下列代码添加到 was.policy 或 app.policy 文件中,使应用程序能够使用线程:
grant codeBase "file:${application}" {
permission java.lang.RuntimePermission "stopThread";
permission java.lang.RuntimePermission "modifyThread";
permission java.lang.RuntimePermission "modifyThreadGroup";
};
要点: app.policy 文件中不支持 Signed By 和 Java 认证和授权服务 (JAAS) 主体关键字。然而,下列文件中支持 Signed By 关键字:java.policy、server.policy 和 client.policy 文件。当 java.security.auth.policy Java 虚拟机 (JVM) 系统属性指定了 JAAS 主体关键字时,在 JAAS 策略文件中会支持该关键字。可以在 java.security.auth.policy 属性中使用 auth.policy.url.n=URL 来静态设置授权策略文件,其中 URL 是授权策略的位置。
如果企业应用程序的缺省许可权(java.policy 文件、server.policy 文件和 app.policy 文件中定义的许可权并集)足够,那么无需执行操作。自动使用缺省 app.policy 文件。如果对单元中所有企业应用程序需要特定更改,请更新 app.policy 文件。策略文件中的语法错误导致应用程序服务器中启动失败。仔细地编辑这些策略文件。
注: app.policy 文件的更新仅适用于节点上 app.policy 文件所属的企业应用程序。
要抽取策略文件,请使用适合于环境的变量值通过命令提示符在一行中输入以下命令:
![[Windows]](../images/windows.gif)
wsadmin> set obj [$AdminConfig extract cells/cell_name/node/node_name/app.policy c:\temp\test\app.policy]
![[IBM i]](../images/iseries.gif)
![[z/OS]](../images/ngzos.gif)
wsadmin> set obj [$AdminConfig extract cells/cell_name/node/node_name/app.policy /temp/test/app.policy]
用策略工具编辑抽取的 app.policy 文件。有关更多信息,请参阅使用 PolicyTool 来编辑 Java 2 安全性的策略文件。app.policy 文件的更改对于节点是本地的。
要检入策略文件,请使用适合于环境的变量值通过命令提示符在一行中输入以下命令:
![[Windows]](../images/windows.gif)
wsadmin> $AdminConfig checkin cells/cell_name/nodes/node_name/app.policy c:\temp\test\app.policy $obj
![[IBM i]](../images/iseries.gif)
![[z/OS]](../images/ngzos.gif)
wsadmin> $AdminConfig checkin cells/cell_name/nodes/node_name/app.policy temp/test/app.policy $obj
符号 | 含义 |
---|---|
file:${application} | 许可权适用于应用程序内的所有资源 |
file:${jars} | 许可权应用于应用程序内的所有实用程序 Java 归档 (JAR) 文件 |
file:${ejbComponent} | 许可权适用于应用程序中的企业 Bean 资源 |
file:${webComponent} | 许可权适用于应用程序中的 Web 资源 |
file:${connectorComponent} | 许可权适用于应用程序和独立连接器资源内的连接器资源。 |
符号 | 含义 |
---|---|
${app.installed.path} | 安装应用程序的路径 |
${was.module.path} | 安装模块的路径 |
${current.cell.name} | 当前单元名称 |
${current.node.name} | 当前节点名称 |
${current.server.name} | 当前服务器名称 |
提示: 您无法在 ${application} 条目中使用 ${was.module.path}。
WebSphere Application Server 所提供的 app.policy 文件位于 profile_root/config/cells/cell_name/nodes/node_name/app.policy 中,它包含下列缺省许可权:
注意: 在下列代码样本中,为了便于说明,与 java.io.FilePermission 许可权相关的前两行分别被分割成两行。
grant codeBase "file:${application}" {
// The following are required by JavaMail
permission java.io.FilePermission "${was.install.root}${/}lib${/}activation-impl.jar", "read";
permission java.io.FilePermission "${was.install.root}${/}lib${/}mail-impl.jar", "read";
};
grant codeBase "file:${jars}" {
permission java.net.SocketPermission "*", "connect";
permission java.util.PropertyPermission "*", "read";
};
grant codeBase "file:${connectorComponent}" {
permission java.net.SocketPermission "*", "connect";
permission java.util.PropertyPermission "*", "read";
};
grant codeBase "file:${webComponent}" {
permission java.io.FilePermission "${was.module.path}", "read";
permission java.io.FilePermission "${was.module.path}${/}-", "read, write"
permission java.lang.RuntimePermission "loadLibrary.*";
permission java.lang.RuntimePermission "queuePrintJob";
permission java.net.SocketPermission "*", "connect";
permission java.util.PropertyPermission "*", "read";
};
grant codeBase "file:${ejbComponent}" {
permission java.lang.RuntimePermission "queuePrintJob";
permission java.lang.RuntimePermission "loadLibrary.*";
permission java.net.SocketPermission "*", "connect";
permission java.util.PropertyPermission "*", "read";
permission java.io.FilePermission "*", "read,write";
};
如果单元中的所有 WebSphere Application Server 企业应用程序需要在 java.policy 文件、server.policy 文件和 app.policy 文件中未定义为缺省值的许可权,请更新 app.policy 文件。缺少许可权的症状是发生 java.security.AccessControlException 异常。
注: 对 app.policy 文件所作的更新仅适用于节点上 app.policy 文件所属的企业应用程序。
![[Windows]](../images/windows.gif)
java.security.AccessControlException: access denied
(java.io.FilePermission
C:\WebSphere\AppServer\java\jre\lib\ext\mail.jar read)
当 Java 程序收到此异常并且添加此许可权被认为是正当的时,添加许可权到 server.policy 文件,例如:
![[Windows]](../images/windows.gif)
grant codeBase "file:user_client_installed_location" {
permission java.io.FilePermission
"C:\WebSphere\AppServer\java\jre\lib\ext\mail.jar", "read";
};
![[IBM i]](../images/iseries.gif)
grant codeBase "file:user_client_installed_location" {
permission java.io.FilePermission
"${was.install.root}$(/)java$(/)jre$(/)lib$(/)ext$(/)mail.jar", "read";
};
为了便于说明,上几行许可权信息被分割。实际上在一行内输入许可权。
要确定是否添加许可权,请参阅 AccessControlException 主题。
重新启动所有 WebSphere Application Server 企业应用程序,以确保更新后的 app.policy 文件生效。