Java 2 安全性
Java™ 2 安全性 功能在 WebSphere® Application Server Liberty中受支持。 Java 2 安全性 提供基于策略的细颗粒度访问控制机制,通过在允许访问某些受保护的系统资源之前检查许可权来提高整体系统完整性。
Java 2 安全性 独立于 Java Platform, Enterprise Edition 基于角色的授权。 Java 2 安全性 保护对系统资源 (例如,文件输入和输出,套接字和属性) 的访问权; 而 Java Platform, Enterprise Edition 安全性保护对 Web 资源 (例如, Servlet 和 JSP 文件) 的访问权。
针对部署者和管理员的 Java 2 安全性
在启用 Java 2 安全性之前,需要确保所有应用程序都被授予必需的许可权,否则应用程序可能无法运行。 缺省情况下,系统会针对每个 Java 平台企业修订版 7.0 规范向应用程序授予许可权。 如果未针对 Java 2 安全性 准备应用程序,或者如果应用程序提供程序未提供 permissions.xml 文件作为应用程序的一部分,那么在启用 Java 2 安全性 时,应用程序可能会在运行时导致 Java 2 安全性 访问控制异常。 即使应用程序正在运行,它也可能不会正常运行。针对应用程序开发者的 Java 2 安全性
应用程序开发者必须了解在缺省 WebSphere 策略中授予的许可权及 Java SDK API 的许可权需求。 您需要知道应用程序调用的 API 是否需要额外许可权。 有关哪些 Java API 需要许可权的更多信息,请参阅 Java 2 SDK 中的许可权。当您使用包含 Web 应用程序捆绑包 (WAB) 的 OSGi 应用程序时,许可权是通过 permissions.perm 文件添加的。 如果 WAB 没有 permissions.perm 文件,那么策略缺省为 java.security.AllPermission.
启用 Java 2 安全性
Java 2 安全性 函数是内核扩展的一部分,并在引导时通过使用websphere.java.security 属性更新 bootstrap.properties 文件来启用。如果在 bootstrap.properties 文件中指定了 websphere.java.security 属性,那么将强制实施 Java 2 安全性 ; 否则,不会进行许可权检查。
指定受限许可权
Liberty 提供了一种机制,用于在运行 Web 或 EJB 应用程序组件时指定受限许可权。 受限许可权确保不向捆绑包或应用程序授予该许可权的任何实例。 它们提供一种机制以阻止应用程序向其自身授予必须允许的许可权之外的其他许可权,例如,退出 VM 的许可权。os.name 的 PropertyPermission。 此语法在
server.xml 文件和 client.xml 文件中完全相同:
<javaPermission className="java.security.PropertyPermission" name="os.name" actions="write" restriction="true" />
授予许可权
OSGi 捆绑包可自我调整通过 permissions.perm 文件向该捆绑包内的库/类授予的许可权。应用程序也可自我调整通过 permissions.xml 文件授予或通过在 server.xml 文件和 client.xml 文件中指定许可权授予来授予的许可权。
OSGi 捆绑包许可权
OSGi 规范提供一种机制以通过捆绑包的 OSGI-INF 目录中的 permissions.perm 文件指定对捆绑包的许可权。 此机制允许对捆绑包的许可权进行细颗粒度访问控制。在 server.xml 和 client.xml 中对应用程序声明许可权
没有指定代码库的许可权 (在 server.xml 和 client.xml 文件中定义) 适用于该 Liberty 服务器上的所有应用程序。PropertyPermission:
<javaPermission className="java.util.PropertyPermission" name="*" actions="read" />os.name 的 PropertyPermission。 此语法在
server.xml 文件和 client.xml 文件中完全相同:
<javaPermission className="java.security.PropertyPermission" name="os.name" actions="write" restriction="true" />
- 受限许可权的 restriction 设置为 true。
- 如果应用程序尝试向其自身授予定义为受限许可权的许可权,那么受限许可权优先于授权并且不允许授权。
在 permissions.xml 中对应用程序声明许可权
permissions.xml 文件是 Java EE7 规范引入的新文件。 它被打包在应用程序目录的 META-INF 目录下。对于打包为独立 .war 文件的应用程序,在 META-INF WAR 级别指定的许可权适用于打包在 .war 文件中的所有模块和库。
对于打包在 .ear 文件中的应用程序,必须在 .ear 文件级别声明许可权。 此许可权集适用于打包在 .ear 文件或其所包含模块中的所有模块和库。 这类打包模块中的任何 permissions.xml 文件将被忽略,不管是否对 .ear 文件提供了 permissions.xml 文件都是如此。
对于打包在 .rar 文件中的应用程序,必须在 META-INF RAR 级别声明许可权。
no-rethrow 选项
启用 Java 2 安全性后,发生许可权违例时,缺省情况下 JDK 安全管理器会抛出java.security.AccessControl
异常。 如果不处理此异常,那么可能导致运行时失败。 如果开发者在准备应用程序以使用 Java 2 安全性时需要帮助,可使用了 no-rethrow 选项。 no-rethrow
选项允许将 AccessControl 异常记录在 console.log 和 messages.log 中而不会导致应用程序失败。 通过在 bootstrap.properties 文件中指定 websphere.java.security.norethrow=true 来启用 no-rethrow 选项。 缺省情况下未启用 no-rethrow 选项,因此,必须在 bootstrap.properties 文件中指定它以启用此属性。