我想了解EJB安全性如何在WebLogic服務器上工作。在Weblogic上配置EJB安全
我有以下ejb-jar.xml中配置
<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中的EJB:
<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不應該爲在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>
什麼調用EJB A? –
但是,如果EJB A調用EJB X的方法,則EJB X可以基於EJB A的「run-as」主體爲其方法設置方法訪問權限。爲此,必須定義自己的安全角色並添加然後在ejb-jar.xml中的 method-permission>元素中爲該安全角色定義權限。我只是想知道爲什麼當我從EJB B調用EJB A時,我可以訪問它的方法。我的猜測是,這是因爲即使安全角色是在Bean A中沒有定義權限。 –
EJB A由EJB B調用。 –