配置 Java 2 安全性的 was.policy 文件
如果应用程序要访问特定的资源,那么您应该更新 was.policy 文件。
开始之前
profile_root/config/cells/cell_name/applications/
ear_file_name/deployments/application_name/META-INF/was.policy
请参阅 Java 2 安全策略文件,以获取 WebSphere Application Server V6.1 支持的可用策略文件列表。
下列文件中所包含的许可权并集适用于 WebSphere Application Server 企业应用程序:
- java.security 文件的 policy.url.* 属性中指定的所有策略文件。
- app.policy 文件,它由配置和文件复制服务管理。
- server.policy 文件。
- java.policy 文件。
- 应用程序 was.policy 文件。
- ra.xml 文件的许可权规范。
- 共享库,其为 library.policy 文件。
在这些文件中进行的更改将复制到单元中的其他节点。
符号 | 定义 |
---|---|
file:${application} | 许可权适用于在应用程序中使用的所有资源 |
file:${jars} | 许可权适用于应用程序内的所有实用程序 Java 归档 (JAR) 文件 |
file:${ejbComponent} | 许可权适用于应用程序中的企业 Bean 资源 |
file:${webComponent} | 许可权适用于应用程序中的 Web 资源 |
file:${connectorComponent} | 许可权适用于应用程序中的连接器资源 |
在 WebSphere Application Server 中,处理线程的应用程序必须具有 was.policy 或 app.policy 文件中指定的适当线程许可权。如果未指定线程许可权,那么应用程序就无法处理线程,WebSphere Application Server 将创建 java.security.AccessControlException 异常。如果将许可权添加到特定应用程序的 was.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 文件中,但是许可权的更改要求重新启动 WebSphere Application Server。要点: 在 was.policy 文件中不支持 Signed By 和 Java 认证和授权服务 (JAAS) 主体关键字。Signed By 关键字在 java.policy、server.policy 和 client.policy 策略文件中受支持。当 Java 虚拟机 (JVM) 系统属性
java.security.auth.policy 指定了 JAAS 主体关键字时,在 JAAS 策略文件中支持该关键字。可以在 java.security.auth.policy 文件中使用
auth.policy.url.n=URL 来静态地设置授权策略文件,其中
URL 是授权策略的位置。
除这些块以外,可以为粒度设置指定模块名。例如,
grant codeBase "file:DefaultWebApplication.war" {
permission java.security.SecurityPermission "printIdentity";
};
grant codeBase "file:IncCMP11.jar" {
permission java.io.FilePermission
"${user.install.root}${/}bin${/}DefaultDB${/}-",
"read,write,delete";
};
符号 | 定义 |
---|---|
${app.installed.path} | 安装应用程序的路径 |
${was.module.path} | 安装模块的路径 |
${current.cell.name} | Current®单元名 |
${current.node.name} | 当前节点名 |
${current.server.name} | 当前服务器名 |
关于此任务
提示: 策略文件中的语法错误将导致应用程序服务器失败。编辑这些策略文件时请小心。
过程
结果
示例
![[IBM i]](../images/iseries.gif)
![[z/OS]](../images/ngzos.gif)
java.security.AccessControlException: access denied (java.io.FilePermission
${was.install.root}/java/ext/mail.jar read)
![[z/OS]](../images/ngzos.gif)
![[IBM i]](../images/iseries.gif)
注: 以下示例拆分为若干行,仅仅是为了便于说明。实际上在一行内输入许可权。
![[IBM i]](../images/iseries.gif)
![[z/OS]](../images/ngzos.gif)
java.security.AccessControlException: access denied (java.io.FilePermission
${was.install.root}/java/ext/mail.jar read)
当 Java 程序接收到此异常,并且添加此许可权被认为是正当时,请在 was.policy 文件中添加以下许可权:
![[IBM i]](../images/iseries.gif)
![[z/OS]](../images/ngzos.gif)
grant codeBase "file:user_client_installed_location" {
permission java.io.FilePermission
"${was.install.root}$(/)java$(/)jre$(/)lib$(/)ext$(/)mail.jar", "read";
};
要确定是否添加许可权,请参阅“Java 2 安全性的访问控制异常”。