迁移 Java 2 安全策略
请使用本主题来获取有关迁移 Java™ 2 安全策略的指导信息。
有关此任务
先前的 WebSphere® Application Server 发行版
WebSphere Application Server 在服务器运行时中使用 Java 2 安全管理器来阻止企业应用程序调用 System.exit 和 System.setSecurityManager 方法。 这两个 Java 应用程序编程接口 (API) 如果由企业应用程序调用,将产生不期望的后果。 例如, System.exit API 会导致 Java 虚拟机 (应用程序服务器进程) 过早退出,这不是应用程序服务器的有益操作。
要正确支持 Java 2 安全性,必须将所有服务器运行时标记为privileged(在正确的位置插入了 doPrivileged API 调用) ,并标识缺省许可权集或策略。 应用程序代码没有特权,并且服从策略文件中定义的许可权。 doPrivileged 检测很重要,并且是支持 Java 2 安全性所必需的。 没有它,应用程序代码必须被授予服务器运行时所需的许可权。 此情况是由于 Java 2 安全性用于实施许可权检查的设计和算法所致。 请参阅 Java 2 安全性检查许可权算法。
- java.lang.RuntimePermission(exitVM)
- java.lang.RuntimePermission(setSecurityManager)
无论 Java 2 安全策略中的内容如何,都将拒绝应用程序代码访问这些许可权。 但是,服务器运行时被授予这些许可权。 所有其他许可权检查并非都执行。
- java.net.SocketPermission
- java.net.NetPermission
但是,并非所有产品服务器运行时都正确地标记为有特权的。 除了前面列出的这两个许可权之外,您还必须授予应用程序代码所有其他的许可权,否则企业应用程序的运行可能会失败。 企业应用程序的此 Java 2 安全策略是自由的。
更改的内容
Java 2 安全性在 WebSphere Application Server中完全受支持,这意味着将强制实施所有许可权。 企业应用程序的缺省 Java 2 安全策略是由 Java Platform, Enterprise Edition (Java EE) V 1.4 规范定义的建议许可权集。 请参阅profile_root/config/cells/cell_name/nodes/node_name/app.policy针对向企业应用程序授予的缺省 Java 2 安全策略的文件。 与前发行版比较,此策略要严格得多。
所有策略是声明性的。 产品安全管理器支持策略文件中声明的所有策略。 此规则有一个例外: 企业应用程序被拒绝访问在以下环境中声明的许可权:profile_root/config/cells/cell_name/filter.policy中。
在应用程序代码中,不要使用 setSecurityManager 许可权来设置安全管理器。 当应用程序使用 setSecurityManager 权限时,会与应用程序内部的安全管理器发生冲突。 WebSphere Application Server. 如果必须在应用程序中设置安全管理器以用于 RMI ,那么还必须在 WebSphere Application Server 管理控制台的 "全局安全性" 页面上启用 使用 Java 2 安全性来限制应用程序对本地资源的访问 选项。 WebSphere Application Server 然后注册安全管理器。 应用程序代码可通过使用 System.getSecurityManager() 应用程序编程接口 (API) 来验证是否已注册此安全管理器。
迁移系统属性
- java.security.policy. 策略文件的绝对路径(必需的操作)。 此系统属性包含系统许可权 (授予 Java 虚拟机 (JVM) 和产品服务器运行时的许可权) 和企业应用程序许可权。 将企业应用程序的 Java 2 安全策略迁移到 V 9.0。 对于 Java 2 安全策略迁移,请参阅迁移 Java 2 安全策略的步骤。
- enableJava2Security. 用于启用 Java 2 安全性实施 (不需要任何操作)。 不推荐使用此系统属性; WebSphere 配置应用程序编程接口 (API) 中的标志用于控制是否启用 Java 2 安全性。 通过管理控制台启用此选项。
- was.home. 已展开到 WebSphere Application Server 的安装目录 (可能需要操作)。 不推荐使用此系统属性;它已被 ${user.install.root} 和 ${was.install.root} 属性取代。 如果目录包含特定于实例的数据,请使用 ${user.install.root};否则使用 ${was.install.root}。 可互换地将这些属性用于 WebSphere Application Server 或 WebSphere Application Server Network Deployment 环境。 请参阅迁移 Java 2 安全策略的步骤。
迁移 Java 2 安全策略
由于在同一策略文件中混用了系统许可权和应用程序许可权,因此不存在将 Java 策略文件自动迁移到 版本 9.0 的简单方法。 手动将企业应用程序的 Java 2 安全策略复制到was.policy或app.policy中。 但是,将 Java 2 安全策略迁移到was.policy最好使用文件,因为使用符号或相对代码库而不是绝对代码库。 这样做有很多好处。 授予在以下目录中定义的许可权:was.policy仅适用于特定企业应用程序,而在app.policy文件将应用于在其节点上运行的所有企业应用程序。app.policy文件属于。
有关策略管理的更多详细信息,请参阅 Java 2 安全策略文件 主题。
以下示例说明从先前发行版迁移 Java 2 安全策略。 内容包括 Java 2 安全策略文件app1.ear企业应用程序和系统许可权,即授予 Java 虚拟机 (JVM) 和产品服务器运行时的许可权。
Java 2 安全策略文件的缺省位置为profile_root/properties/java.policy. 为清楚起见,将省略缺省许可权:
Java 2 安全策略文件的缺省位置为profile_root/properties/java.policy. 为清楚起见,将省略缺省许可权:
// For product Samples
grant codeBase "file:${app_server_root}/installedApps/app1.ear/-" {
permission java.security.SecurityPermission "printIdentity";
permission java.io.FilePermission "${app_server_root}${/}temp${/}somefile.txt",
"read";
};
为了清楚地说明,在本示例中,所有许可权迁移为应用程序级别许可权。 但是,您可以在组件级别 (Web ,企业 Bean ,连接器或实用程序 Java 归档 (JAR) 组件级别) 更精细地授予许可权,也可以向特定组件授予许可权。