访问安全 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)
我是 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)