配置 Java 2 安全策略文件

时间:2020-12-19 18:03:02

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

在您开始之前

Java 2 安全性使用若干策略文件来确定每个 Java 程序的许可权。
WebSphere Application Server 支持两种类型的策略文件:动态策略文件和静态策略文件。静态策略文件提供缺省许可权。动态策略文件提供应用程序许可权。提供了六个动态策略文件:
策略文件名 描述
app.policy 包含单元中所有企业应用程序的缺省许可权。
注:  app.policy 文件的更新仅适用于节点上  app.policy 文件所属的企业应用程序。
was.policy 包含 WebSphere Application Server 企业应用程序的应用程序特定许可权。此文件封装在企业归档(EAR)文件中。
ra.xml 包含 WebSphere Application Server 企业应用程序的连接器应用程序特定许可权。此文件封装在资源适配器归档(RAR)文件中。
spi.policy 包含服务提供者接口(SPI)或嵌入到 WebSphere Application Server 的第三方资源的许可权。缺省内容授予每个事物。当单元需要对单元中的 SPI 进行更多保护时,小心地更新此文件。此文件适用于 resources.xml 文件中定义的所有 SPI。
library.policy 包含企业应用程序的共享库的许可权。
filter.policy 包含需要从单元中的 was.policy 文件和 app.policy 文件过滤的许可权列表。此过滤机制仅适用于was.policy 和 app.policy 文件。
在 WebSphere Application Server 中,应用程序必须具有  was.policy 或  app.policy 文件中指定的适当线程许可权。如果未指定线程许可权,应用程序就无法处理线程,WebSphere Application Server 将创建 java.security.AccessControlException。 app.policy 文件应用于指定的节点。如果您更改一个  app.policy 文件中的许可权,那么您必须合并其余节点上相同文件中的新线程策略。而且,如同您将线程策略添加到  app.policy 文件,那么您必须重新启动 WebSphere Application Server 以执行新许可权。但是,如果您将许可权添加到特定应用程序的  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";
};
重要: 在以下策略文件中不支持 Signed By 关键字: app.policyspi.policylibrary.policywas.policy 和  filter.policy 文件。但是,在下列策略文件中支持关键字“Signed By”: java.policyserver.policy 和  client.policy 文件。以下文件中不支持 Java Authentication and Authorization Service(JAAS): app.policyspi.policylibrary.policywas.policy 和  filter.policy 文件。但是,当 Java 虚拟机(JVM)系统属性 java.security.auth.policy 指定了 JAAS 主体关键字时,在 JAAS 策略文件中支持该关键字。可以静态地使用  auth.policy.url.n=URL(其中 URL 为授权策略的位置)在  java.security.auth.policy 中设置授权策略文件。

过程

  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 企业应用程序。

示例

如果单元中的 WebSphere Application Server 企业应用程序需要许可权,需要更新一些动态策略文件。缺少许可权的症状是 java.security.AccessControlException 异常。缺少的许可权在异常数据中列示。

java.security.AccessControlException: access denied 
(java.io.FilePermission C:\WebSphere\AppServer\java\jre\lib\ext\mail.jar read)

前两行因为页面宽度而拆分为两行。请在一行上输入许可权。

当 Java 程序接收到此异常,并且添加此许可权被认为是正当的时,请添加许可权到适当的动态策略文件。

grant codeBase "file:user_client_installed_location" {
permission java.io.FilePermission 
"C:\WebSphere\AppServer\java\jre\lib\ext\mail.jar", "read";
};

前面的许可权信息行由于其长度而被拆分为多个行。请在一行上输入许可权。

要确定是否添加许可权,请参阅访问控制异常 主题。