在WebLogic上配置EJB安全性



我正在尝试了解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不应该为分配给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 principal?

<method-permission>
    <role-name>beanA_users</role-name>
        <method>
            <ejb-name>BeanA</ejb-n‌​ame>
                <method-name>*</method-name>
        </method‌​>
</method-permission‌​>

您在这里棍子的末端错误。

添加时:

    <security-identity>              
        <run-as>
            <role-name>beanA_users</role-name>
        </run-as>
    </security-identity>

to bean定义,这告诉weblogic应该在其启动的bean上的任何调用中应用什么角色,而不是用户启动的内容。

即。此安全身份将应用于EJB计时器方法和MDB的onMessage方法(如果我没记错的话,某些管家操作)。

带有<run-as-role-assignment>...</run-as-role-assignment>元素的WebLogic扩展名在这些方法调用中添加了定义的主体,以便Javax.ejb.ejbcontext.getCallerPrinCipal()在这些方法调用之一中返回anonymous以外的其他内容。

>

在所有其他情况下

通常,用户将通过其基于Servlet的Web应用程序进行身份验证,该应用程序与应用程序服务器提供的安全域联系。然后,servlet容器将将传入的HTTP请求与用户主体相关联。该用户主体必须与一个或多个"角色"关联,然后才能执行基于角色的访问(以供应商的方式完成,但通常与JAAS相关联)。如果用户没有角色,容器将拒绝任何尝试在部署描述符中受到安全角色声明保护或关联 @javax.annotation.annotation.security.security.Roles.RoreSallowed注释的尝试。Servlet容器建立的安全环境通过随后的EJB呼叫链传播,直到成功返回或被安全角色阻止为止。

有关更多信息,请参阅Servlet规范和EJB规范的"安全"章节。

相关内容

  • 没有找到相关文章

最新更新