我试图了解 EJB 安全性如何在 WebLogic 服务器上工作。
我在 ejb-jar.xml 中有一个具有以下配置的 EJB
<session>
<ejb-name>BeanA</ejb-name>
....
<security-identity>
<run-as>
<role-name>beanA_users</role-name>
</run-as>
</security-identity>
</session>
<assembly-descriptor>
<security-role>
<role-name>beanA_users</role-name>
</security-role>
<container-transaction>
<method>
<ejb-name>BeanA</ejb-name>
<method-name>*</method-name>
</method>
</container-transaction>
</assembly-descriptor>
在 weblogic-ejb-jar.xml 中:
<security-role-assignment>
<role-name>beanA_users</role-name>
<principal-name>runas_a</principal-name>
</security-role-assignment>
<run-as-role-assignment>
<role-name>beanA_users</role-name>
<run-as-principal-name>runas_a</run-as-principal-name>
</run-as-role-assignment>
我是这样解释的:BeanA 作为 beanA_users 运行。“runas_a”是 beanA_users 之一。因此,BeanA 以 runas_a 用户身份运行。此外,所有 beanA_users 角色中的用户都可以调用所有 BeanA 方法。换句话说,Bean_A 作为runas_a 运行,只有runas_a 可以调用它的方法。这个对吗?
但是,当我从另一个具有以下配置的 EJB 调用此 EJB 时,我能够通过。Bean A 不应该为分配给 BeanB 中的 BeanB_users 角色的主体配置权限吗?
ejb-jar.xml:
<session>
<ejb-name>BeanB</ejb-name>
...
<security-identity>
<run-as>
<role-name>beanB_users</role-name>
</run-as>
</security-identity>
</session>
weblogic-ejb-jar.xml:
<run-as-role-assignment>
<role-name>beanB_users</role-name>
<run-as-principal-name>runas_b</run-as-principal-name>
</run-as-role-assignment>
编辑:
阅读 ejb-jar.xml 模式后,本示例中的 Bean A 似乎没有在<assembly-descriptor>
元素中定义任何权限。它只定义了安全角色。我想这就是为什么任何 EJB 都可以调用它的方法的原因。但是为什么在这种情况下定义安全角色分配呢?例如,如果 BeanA 在元素中有以下内容,在这种情况下是否会阻止 BeanB 通过,因为权限不包括 runas_b 主体?
<method-permission>
<role-name>beanA_users</role-name>
<method>
<ejb-name>BeanA</ejb-name>
<method-name>*</method-name>
</method>
</method-permission>