【问题标题】:Problems in accessing secure Ejb's访问安全 Ejb 的问题
【发布时间】:2017-03-16 21:29:12
【问题描述】:

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

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

javax.ejb.EJBAccessException: 服务器(id=4773e3aa,主机=localhost)跟踪开始: javax.ejb.EJBAccessException: SECJ0053E: 授权失败???调用 (Bean)d365-EB_OFSConnectorService-ejb_jar#d365-ModuleConnectorService-ejb.jar#ModuleConnectorServiceBean processOFS:java.lang.String:1 时未授予任何所需角色:d365user 在 com.ibm.ws.security.core.SecurityCollaborator.performAuthorization(SecurityCollaborator.java:626) 在 com.ibm.ws.security.core.EJSSecurityCollaborator.preInvoke(EJSSecurityCollaborator.java:265) 在 com.ibm.ws.ejbcontainer.runtime.EJBSecurityCollaboratorAdapter.preInvoke(EJBSecurityCollaboratorAdapter.java:82) 在 com.ibm.ws.ejbcontainer.runtime.EJBSecurityCollaboratorAdapter.preInvoke(EJBSecurityCollaboratorAdapter.java:43) 在 com.ibm.ejs.container.EJSContainer.notifySecurityCollaboratorPreInvoke(EJSContainer.java:3895) 在 com.ibm.ejs.container.EJSContainer.preInvokeAfterActivate(EJSContainer.java:3825) 在 com.ibm.ejs.container.EJSContainer.EjbPreInvoke(EJSContainer.java:3046) 在 com.kaiser.services.ofsconnector.ejb.EJSRemote0SLModuleConnectorServiceBean_8c753384.processOFS(EJSRemote0SLModuleConnectorServiceBean_8c753384.java) 在 com.kaiser.services.ofsconnector.ejb._EJSRemote0SLModuleConnectorServiceBean_8c753384_Tie.processOFS__CORBA_WStringValue(_EJSRemote0SLModuleConnectorServiceBean_8c753384_Tie.java:1) 在 com.kaiser.services.ofsconnector.ejb._EJSRemote0SLModuleConnectorServiceBean_8c753384_Tie._invoke(_EJSRemote0SLModuleConnectorServiceBean_8c753384_Tie.java) 在 com.ibm.CORBA.iiop.ServerDelegate.dispatchInvokeHandler(ServerDelegate.java:669) 在 com.ibm.CORBA.iiop.ServerDelegate.dispatch(ServerDelegate.java:523) 在 com.ibm.rmi.iiop.ORB.process(ORB.java:523) 在 com.ibm.CORBA.iiop.ORB.process(ORB.java:1575) 在 com.ibm.rmi.iiop.Connection.doRequestWork(Connection.java:3039) 在 com.ibm.rmi.iiop.Connection.doWork(Connection.java:2922) 在 com.ibm.rmi.iiop.WorkUnitImpl.doWork(WorkUnitImpl.java:64) 在 com.ibm.ejs.oa.pool.PooledThread.run(ThreadPool.java:118) 在 com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1862) SERVER (id=4773e3aa, host=localhost) TRACE END。

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

更新-1 在我的 ejb-jar.xml 中,安全性被定义为

 <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 方法上的访问注释来快速尝试。这将追踪问题到网络或(更有可能)无效的用户->角色绑定。
  • 我已经删除了安全限制并且它可以工作。所以我们可以肯定地说网络没有问题。

标签: java websphere ejb-3.0 ejb-3.1 websphere-8


【解决方案1】:
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)

【讨论】:

  • 我们为什么要使用这些ssl和sas配置?我知道如果我们使用身份验证,那么我们需要提供 SSL,但仍然不明白我们为什么使用 SAS,您能否提供一些相关信息?
  • @user2900314 如果您需要对 bean 进行身份验证(并且您需要,因为您在 EJB 配置中有方法权限条目),那么两个配置(ssl 和 Corba)都是必需的。 SSL 描述了与传输层相关的设置,sas.client.props 描述了 CSIv2 auth 协议使用的设置。你可以在这里找到更多信息:Authentication protocol for EJB security.
【解决方案2】:

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

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

应用程序 -> WebSphere 企业应用程序 -> -> 安全角色到用户/组映射 -> 选择适当的角色并单击 “映射用户” 以映射用户. Map Special Subject -> All Authenticated in Application's Realm 可用于授予所有经过身份验证的用户访问权限,而不是映射单个用户。

【讨论】:

  • Ejb 不使用任何注释。它使用基于 xml 的绑定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-30
  • 1970-01-01
  • 1970-01-01
  • 2012-10-20
  • 2021-03-23
  • 2012-08-01
相关资源
最近更新 更多