2016-11-03 39 views
0

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

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

javax.ejb.EJBAccessException: SERVER(ID = 4773e3aa,主机=本地主机)TRACE START: javax.ejb.EJBAccessException:SECJ0053E:授权失败???调用(Bean)d365-EB_OFSConnectorService-ejb_jar#d365-ModuleConnectorService-ejb.jar#ModuleConnectorServiceBean processOFS:java.lang.String:1未被授予任何所需的角色:d365user at 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) 在玉米.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) at com.ibm.CORBA.iiop.ServerDelegate.dispatch(ServerDelegate.java:523) at com.ibm.rmi.iiop.ORB.proces S(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) 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。

我已经试过在谷歌找它,但没有成功。欢迎提出建议。

更新-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> 
+0

如果你仍然在发展,做一个快速尝试删除有关EJB方法的访问注释。这将追踪到网络问题或(更可能)无效的用户角色绑定。 – Leonardo

+0

我已经删除了安全限制并且它可以工作。所以我们可以放心地说,网络中没有问题。 – User27854

回答

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)

+0

你为什么使用这些ssl和sas配置?我明白,如果我们使用身份验证,那么我们需要提供SSL,但仍然没有得到我们为什么使用SAS,请您提供一些有关此信息的信息? – User27854

+1

@ user2900314如果您需要对您的bean进行身份验证(并且您需要,因为您在EJB配置中拥有方法权限条目),那么configs(ssl和Corba)都是必需的。 SSL描述了与传输层相关的设置,sas.client.props描述了CSIv2认证协议使用的设置。您可以在这里找到更多信息:[用于EJB安全的身份验证协议](http://www.ibm.com/support/knowledgecenter/SSAW57_9.0.0/com.ibm.websphere.nd.multiplatform.doc/ae/csec_corba。 HTML)。 – Gas

+0

非常感谢这些信息。 – User27854

0

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

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

应用程序 - > WebSphere企业应用程序 - > - >安全角色到用户/组映射 - >选择上合适的角色和CLCK “映射用户”映射用户。 映射特殊主题 - >所有在应用领域中验证的可用于为所有经过身份验证的用户提供访问权限,而不是映射单个用户。

+0

Ejb's不使用任何注释。它使用基于xml的绑定。 – User27854