11.6.13.2. 配置 Java 容器授权合约(JACC)的安全性

要配置 JACC,你需要用正确的模块配置你的安全域,然后修改 jboss-web.xml 来包含正确的参数。
为安全域添加 JACC 支持

要为安全域添加 JACC 支持,请添加 JACC 授权策略到安全域的授权栈里,并设置 required 标记。下面是一个带有 JACC 支持的安全域的例子。然而,安全域是在管理控制台或 CLI 里,而不是直接在 XML 里配置的。

<security-domain name="jacc" cache-type="default">
    <authentication>
        <login-module code="UsersRoles" flag="required">
        </login-module>
    </authentication>
    <authorization>
        <policy-module code="JACC" flag="required"/>
    </authorization>
</security-domain>

配置 Web 应用程序以使用 JACC

jboss-web.xml 位于你的部署的 META-INF/WEB-INF/ 目录里,且包含用 web 容器的覆盖选项和其他的 JBoss 专有的配置。要使用启用了 JACC 的安全域,你需要包括 <security-domain> 元素并设置 <use-jboss-authorization> 元素为 true。下面的应用程序是用上面的 JACC 安全域进行正确配置的。

<jboss-web>
    <security-domain>jacc</security-domain>
    <use-jboss-authorization>true</use-jboss-authorization>
</jboss-web>

配置 EJB 应用程序来使用 JACC

配置 EJB 使用安全域并使用 JACC 对于不同的 Web 应用程序是不同的。对于 EJB,你可以在 ejb-jar.xml 里为一个方法或方法组声明 method permissions。在 <ejb-jar> 元素里,任何子 <method-permission> 元素都包含关于 JACC 角色的信息。详情请参考示例配置。EJBMethodPermission 类是 Java EE 6 API 的一部分,且 http://docs.oracle.com/javaee/6/api/javax/security/jacc/EJBMethodPermission.html 里有相关的文档。

例 11.4. EJB 里的 JACC 方法权限示例

<ejb-jar>
  <assembly-descriptor>
    <method-permission>
      <description>The employee and temp-employee roles may access any method of the EmployeeService bean </description>
      <role-name>employee</role-name>
      <role-name>temp-employee</role-name>
      <method>
        <ejb-name>EmployeeService</ejb-name>
        <method-name>*</method-name>
      </method>
    </method-permission>
  </assembly-descriptor>
</ejb-jar>

你也可以通过安全域约束 EJB 的验证和授权机制,就像对 Web 应用程序所做的一样。安全域在 jboss-ejb3.xml 描述符里的 <security> 子元素里声明。除了安全域以外,你也可以指定 run-as principal,它可以修改运行 EJB 的 principal。

例 11.5. EJB 里的安全域声明示例

<security>
  <ejb-name>*</ejb-name>
  <security-domain>myDomain</security-domain>
  <run-as-principal>myPrincipal</run-as-principal>
</security>