将 was.policy 文件添加到 Java 2 安全性应用程序

如果应用程序访问需要比缺省 app.policy 文件中授予的许可权多的许可权的资源,那么它可能需要 was.policy 文件。

关于此任务

当为 WebSphere® Application Server 启用 Java™ 2 安全性时,在访问系统资源前,在 WebSphere Application Server 上运行的所有应用程序都要接受安全性检查。如果应用程序访问需要比缺省 app.policy 文件中授予的许可权多的许可权的资源,那么它可能需要 was.policy 文件。缺省情况下,产品安全性读位于每个节点中的 app.policy 文件 ,并将 app.policy 文件中的许可权授予所有应用程序。在 was.policy 文件中包含任何附加的必需许可权。 如果应用程序需要附加的许可权,那么仅 was.policy 文件是必需的。

所有应用程序的缺省策略文件是在 app.policy 文件中指定的。此文件由产品安全性提供,它是所有应用程序的公共文件,请不要更改此文件。在 was.policy 文件中添加应用程序必需的任何新的许可权。

WebSphere Application Server 提供的 app.policy 文件位于 app_server_root/config/cells/profile/profile_name/config/cell_name/nodes/node_name/app.policy 目录中。 在以下示例中提供了 app.policy 文件的内容:

注意: 在下列代码样本中,为了便于说明,JavaMail 所必需的两个许可权都被分割成两行。实际上在一行内输入许可权。
// The following permissions apply to all the components under the application.

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";

  };
   // The following permissions apply to all utility .jar files  (other 
   //  than enterprise beans JAR files) in the application.
grant codeBase "file:${jars}" {
  permission java.net.SocketPermission "*", "connect";
  permission java.util.PropertyPermission "*", "read";
};

// The following permissions apply to connector resources within the application
grant codeBase "file:${connectorComponent}" {
  permission java.net.SocketPermission "*", "connect";
  permission java.util.PropertyPermission "*", "read";
};

// The following permissions apply to all the web modules (.war files) 
// within the application.
grant codeBase "file:${webComponent}" {
  permission java.io.FilePermission "${was.module.path}${/}-", "read, write";  
       //  where "was.module.path" is the path where the web module is 
       //  installed. Refer to Dynamic policy concepts for other symbols.
  permission java.lang.RuntimePermission "loadLibrary.*";
  permission java.lang.RuntimePermission "queuePrintJob";
  permission java.net.SocketPermission "*", "connect";
  permission java.util.PropertyPermission "*", "read";
};

// The following permissions apply to all the EJB modules within the application.
grant codeBase "file:${ejbComponent}" {
 permission java.lang.RuntimePermission "queuePrintJob";
 permission java.net.SocketPermission "*", "connect";
 permission java.util.PropertyPermission "*", "read";
};

如果对于应用程序或应用程序的一个或多个模块,附加许可权是必需的,那么将 was.policy 文件用于此应用程序。例如,使用 ${application} 的 codeBase 并添加必需的许可权以将附加许可权授予整个应用程序。 同样,使用 ${webComponent} 和 ${ejbComponent} 的 codeBase 将附加许可权授予应用程序中的所有 Web 模块和所有企业 Bean 模块。您可将附加许可权指定给每个模块(.war 文件或 .jar 文件),如以下示例中所示。

本示例举例说明如何在 was.policy 文件中为应用程序添加额外许可权:

注意: 在下列代码样本中,为了便于说明,EJB 模块的许可权被分割成两行。实际上在一行内输入许可权。
// grant additional permissions to a web module
grant codeBase " file:aWebModule.war" {
 permission java.security.SecurityPermission "printIdentity";
};

// grant additional permission to an EJB module
grant codeBase "file:aEJBModule.jar"  {
    permission java.io.FilePermission "
       ${user.install.root}${/}bin${/}DefaultDB${/}-", "read,write,delete";   
    // where, ${user.install.root} is the system property whose value is 
    // located in the app_server_root directory.
 };

要将 was.policy 文件用于应用程序,请执行以下步骤:

过程

  1. 使用策略工具创建 was.policy 文件。 有关使用策略工具的更多信息,请参阅使用 PolicyTool 来编辑 Java 2 安全性的策略文件
  2. 使用策略工具在 was.policy 文件中添加必需的许可权。
  3. 将应用程序企业归档 (EAR) 文件中的 was.policy 文件放在 META-INF 目录下。通过使用 jar 命令,用新创建的 was.policy 文件更新应用程序 EAR 文件。
  4. 验证是否插入了 was.policy 文件,然后启动组装工具。
    [IBM i][z/OS]注: 组装工具不可用。请在其他平台(如 Linux、Intel 或 Windows)上使用组装工具。
  5. 验证应用程序中的 was.policy 文件语法正确。 在组装工具中,右键单击企业应用程序模块并单击运行验证

结果

当启用 Java 2 安全性时,应用程序 EAR 文件现在已准备运行。

示例

此步骤是启用 Java 2 安全性时正确运行应用程序必需的。如果未创建 was.policy 文件,并且它不包含必需的许可权,那么应用程序可能无法访问系统资源。

缺少许可权的症状是 java.security.AccessControlException 异常。缺少的许可权列出在异常数据中,例如,

[IBM i][z/OS]
java.security.AccessControlException: access denied (java.io.FilePermission 
${was.install.root}/java/ext/mail.jar read)
当应用程序接收此异常并且添加此许可权被认为是正当时,在 was.policy 文件中包括许可权,例如,[IBM i][z/OS]
grant codeBase "file:user_client_installed_location" { 
  permission java.io.FilePermission 
"${was.install.root}$(/)java$(/)jre$(/)lib$(/)ext$(/)mail.jar", "read";
};

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

下一步做什么

安装应用程序。

指示主题类型的图标 任务主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsec_waspolicy
文件名:tsec_waspolicy.html