配置 Java 2 安全策略文件

用户可以配置 Java™ 2 安全策略文件,以便为指定的 WebSphere® Application Server 企业应用程序授予所需的许可权。

准备工作

Java 2 安全性使用多个策略文件来确定每个 Java 程序的许可权。

请参阅 "Java 2 安全策略文件" 主题,以获取 WebSphere Application Server支持的可用策略文件的列表。

WebSphere Application Server支持两种类型的策略文件: 动态策略文件和静态策略文件。 静态策略文件提供缺省许可权。 动态策略文件提供应用程序许可权。 提供了六个动态策略文件:
表 1. 动态策略文件 此表列示了动态策略文件。
策略文件名 描述
app.policy 包含单元中所有企业应用程序的缺省许可权。
注: 更新app.policy文件仅应用于节点上的企业应用程序,app.policy文件属于。
was.policy 包含 WebSphere Application Server 企业应用程序的特定于应用程序的许可权。 此文件封装在企业归档 (EAR) 文件中。
ra.xml 包含 WebSphere Application Server 企业应用程序的特定于连接器应用程序的许可权。 此文件封装在资源适配器归档 (RAR) 文件中。
spi.policy 包含 WebSphere Application Server中嵌入的服务提供者接口 (SPI) 或第三方资源的许可权。 缺省内容授予每个事物。 当单元需要对单元中的 SPI 进行更多保护时,小心地更新此文件。 此文件将应用于在此文件中定义的所有 SPI。resources.xml中。
library.policy 包含企业应用程序的共享库的许可权。
filter.policy 包含需要从以下对象进行过滤的许可权列表:was.policy文件和app.policy文件。 此过滤机制仅适用于was.policyapp.policy格式的文件。
在 WebSphere Application Server中,应用程序必须具有在was.policyapp.policy中。 如果没有指定的线程许可权,那么应用程序无法处理线程, WebSphere Application Server 将创建 java.security.AccessControlException 异常。 该app.policy文件应用于指定的节点。 如果您在其中更改了许可权app.policy文件,您必须将新线程策略合并到其余节点上的同一文件中。 此外,如果将线程许可权添加到app.policy文件,必须重新启动 WebSphere Application Server 以强制实施新许可权。 但是,如果将许可权添加到was.policy特定应用程序的文件,您不需要重新启动 WebSphere Application Server。 管理员必须将以下代码添加到was.policyapp.policy用于处理线程的应用程序的文件:
grant codeBase "file:${application}" {
  permission java.lang.RuntimePermission "stopThread";
  permission java.lang.RuntimePermission "modifyThread";
  permission java.lang.RuntimePermission "modifyThreadGroup";
};
重要信息: 以下策略文件中不支持 "签署者" 关键字:app.policy,spi.policy,library.policy,was.policy,和filter.policy格式的文件。 但是,以下策略文件中支持 "签署者" 关键字:java.policy,server.policy,和client.policy格式的文件。 Java 认证和授权服务 (JAAS) 在app.policy,spi.policy,library.policy,was.policy,和filter.policy格式的文件。 但是,当 JAAS 策略文件中指定了 JAAS 主体关键字时,该关键字在该策略文件中受支持。java.security.auth.policyJava 虚拟机 (JVM) 系统属性。 您可以在以下位置静态设置授权策略文件:java.security.auth.policy替换为auth.policy.url.n=URL, where URL是授权策略的位置。

过程

  1. 标识要更新的策略文件。
    提示: 选取作用域最小的策略文件。 您可以避免授予对 Java 程序的额外许可权并保护资源。 您可以更新ra.xml文件或was.policy文件而不是app.policy中。 使用特定组件符号($(ejbcomponent)、${webComponent}、${connectorComponent} 和 ${jars}),而不是 ${application} 符号。 更新动态策略文件,而不是静态策略文件。

    将您不希望授予给单元中的 WebSphere Application Server 企业应用程序的任何许可权添加到filter.policy中。 请参阅 filter.policy 文件许可权

  2. 重新启动 WebSphere Application Server 企业应用程序。

结果

为指定的 WebSphere Application Server 企业应用程序授予了必需的许可权。
[AIX Solaris HP-UX Linux Windows][IBM i]

示例

如果单元中的 WebSphere Application Server 企业应用程序需要许可权,那么需要更新某些动态策略文件。 缺少许可权的症状是 java.security.AccessControlException 异常。 缺少的许可权将在以下异常数据中列出,该数据显示为一行,但拆分为多个部分以方便您阅读。

[IBM i]
java.security.AccessControlException: access denied (java.io.FilePermission 
${was.install.root}/java/ext/mail.jar read)

当 Java 程序接收到此异常并且添加此许可权是合理的时,请向足够的动态策略文件添加许可权。

[IBM i]
grant codeBase "file:user_client_installed_location" { 
  permission java.io.FilePermission 
"${was.install.root}$(/)java$(/)jre$(/)lib$(/)ext$(/)mail.jar", "read";
};

为了便于说明,上几行许可权信息被分割。 请在一行上输入许可权。

要决定是否添加许可权,请参阅 Java 2 安全性的访问控制异常 主题。