访问安全 Ejb 的问题

Problems in accessing secure Ejb's

我是 WebSphere 的新手,我写了一个 ejb 并且已经部署了它。 但是当我尝试访问它时。

我收到以下错误。问题出在绑定或配置安全性或领域上吗?

javax.ejb.EJBAccessException: SERVER (id=4773e3aa, host=localhost) TRACE START: javax.ejb.EJBAccessException: SECJ0053E: Authorization failed for ??? while invoking (Bean)d365-EB_OFSConnectorService-ejb_jar#d365-ModuleConnectorService-ejb.jar#ModuleConnectorServiceBean processOFS:java.lang.String:1 is not granted any of the required roles: d365user at com.ibm.ws.security.core.SecurityCollaborator.performAuthorization(SecurityCollaborator.java:626) at com.ibm.ws.security.core.EJSSecurityCollaborator.preInvoke(EJSSecurityCollaborator.java:265) at com.ibm.ws.ejbcontainer.runtime.EJBSecurityCollaboratorAdapter.preInvoke(EJBSecurityCollaboratorAdapter.java:82) at com.ibm.ws.ejbcontainer.runtime.EJBSecurityCollaboratorAdapter.preInvoke(EJBSecurityCollaboratorAdapter.java:43) at com.ibm.ejs.container.EJSContainer.notifySecurityCollaboratorPreInvoke(EJSContainer.java:3895) at com.ibm.ejs.container.EJSContainer.preInvokeAfterActivate(EJSContainer.java:3825) at com.ibm.ejs.container.EJSContainer.EjbPreInvoke(EJSContainer.java:3046) at com.kaiser.services.ofsconnector.ejb.EJSRemote0SLModuleConnectorServiceBean_8c753384.processOFS(EJSRemote0SLModuleConnectorServiceBean_8c753384.java) at com.kaiser.services.ofsconnector.ejb._EJSRemote0SLModuleConnectorServiceBean_8c753384_Tie.processOFS__CORBA_WStringValue(_EJSRemote0SLModuleConnectorServiceBean_8c753384_Tie.java:1) at com.kaiser.services.ofsconnector.ejb._EJSRemote0SLModuleConnectorServiceBean_8c753384_Tie._invoke(_EJSRemote0SLModuleConnectorServiceBean_8c753384_Tie.java) at com.ibm.CORBA.iiop.ServerDelegate.dispatchInvokeHandler(ServerDelegate.java:669) at com.ibm.CORBA.iiop.ServerDelegate.dispatch(ServerDelegate.java:523) at com.ibm.rmi.iiop.ORB.process(ORB.java:523) at com.ibm.CORBA.iiop.ORB.process(ORB.java:1575) at com.ibm.rmi.iiop.Connection.doRequestWork(Connection.java:3039) at com.ibm.rmi.iiop.Connection.doWork(Connection.java:2922) at com.ibm.rmi.iiop.WorkUnitImpl.doWork(WorkUnitImpl.java:64) at com.ibm.ejs.oa.pool.PooledThread.run(ThreadPool.java:118) at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1862) SERVER (id=4773e3aa, host=localhost) TRACE END.

我曾尝试在 google 中寻找它,但没有成功。欢迎提出建议。

Updates-1 在我的 ejb-jar.xml 中,security 被定义为

 <assembly-descriptor>
    <security-role>
        <role-name>d365user</role-name>
    </security-role>
    <method-permission>
        <role-name>d365user</role-name>
        <method>
            <ejb-name>ModuleConnectorServiceBean</ejb-name>
            <method-name>*</method-name>
        </method>
        <method>
            <ejb-name>ModuleConnectorServiceBeanOMS</ejb-name>
            <method-name>*</method-name>
        </method>           
    </method-permission>
</assembly-descriptor>

ibm-ejb-jar-bnd.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <ejb-jar-bnd xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://websphere.ibm.com/xml/ns/javaee"
        xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-bnd_1_0.xsd" version="1.0">
      <session name="ModuleConnectorServiceBean">
        <resource-ref binding-name="jdbc/t24DataSource" name="jdbc/d365DataSource"/>
        <resource-ref binding-name="jdbc/d365LockingDataSource" name="jdbc/d365LockingDataSource"/>
      </session>

      <session name="ModuleConnectorServiceBeanOMS">
        <resource-ref name="jdbc/d365DataSource" binding-name="jdbc/d365DataSource"/>
        <resource-ref name="jdbc/d365LockingDataSource" binding-name="jdbc/d365LockingDataSource"/>
      </session>
    </ejb-jar-bnd>

我看到上面的授权错误。请检查您的 ejb 或部署描述符 (ejb-jar.xml) 中的 @RolesAllowed("roleName") 等安全注释,以查看用于保护 EJB 的角色。

您需要将这些角色映射到用户注册表(即 LDAP)中的有效用户。只允许有效用户访问您的 EJB。您可以使用管理控制台将安全角色映射到 users/groups,如下所述:

应用程序 -> WebSphere 企业应用程序 -> -> 安全角色到 user/group 映射 -> select 适当的角色并点击 "Map user" 来映射用户。 Map Special Subject -> All Authenticated in Application's Realm 可用于为所有经过身份验证的用户提供访问权限,而不是映射单个用户。

SECJ0053E: Authorization failed for ??? while invoking (Bean)d365-EB_OFSConnectorService-ejb_jar#d365-ModuleConnectorService-ejb.jar#ModuleConnectorServiceBean
 processOFS:java.lang.String:1 is not granted any of the required roles: d365user

您的客户端似乎没有执行正确的身份验证,也没有传递凭据。如果这是独立客户端,请确保使用正确的 SSL 和 CORBA 配置调用它,如下所示:

<java_install_root>/bin/java  
-classpath com.ibm.ws.ejb.thinclient_8.5.0.jar:<list_of_your_application_jars_and_classes> 
-Djava.naming.provider.url=iiop://<your_application_server_machine_name> 
-Dcom.ibm.SSL.ConfigURL=file:///home/user1/ssl.client.props
-Dcom.ibm.CORBA.ConfigURL=file:///home/user1/sas.client.props
<fully_qualified_class_name_to_run>

有关详细信息,请查看此 Running the IBM Thin Client for Enterprise JavaBeans (EJB)