访问安全Ejb的问题

时间:2016-11-03 10:24:46

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

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

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

  

javax.ejb.EJBAccessException:      SERVER(id = 4773e3aa,host = localhost)TRACE START:      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)      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)      在com.kaiser.services.ofsconnector.ejb._EJSRemote0SLModuleConnectorServiceBean_8c753384_Tie._invoke(EJSRemote0SLModuleConnectorServiceBean_8c753384_Tie.java)      at 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>

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

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

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

应用程序 - &gt; WebSphere企业应用程序 - &gt; - &GT;用户/组映射的安全角色 - &gt;选择适当的角色并克隆&#34;映射用户&#34; 以映射用户。 地图专题 - &gt;所有在应用程序领域中进行身份验证可用于为所有经过身份验证的用户提供访问权限,而不是映射单个用户。