2016-11-03 99 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