无法让@RunAs 在 EJB 中工作
Can't get @RunAs to work in an EJB
这是
的后续
我有以下场景:
EJB 1:
@WebService( ... )
@Local(SomeLocalServiceType.class)
@Stateless
@RolesAllowed("SomeRole")
public class SomeServiceBean implements SomeLocalServiceType {
...
@Override
public void someMethodInSomeLocalServiceType() { ... }
...
}
EJB 2:
@Startup
@Singleton
@RunAs("SomeRole")
public class PIRSingletonEJB {
@EJB
private SomeLocalServiceType service;
...
@PostContruct
public void performStartupAction() {
service.someMethodInSomeLocalServiceType();
}
}
简而言之:我有一个 EJB 需要角色 "SomeRole",还有一个启动 EJB 使用 @RunAs
来使用该角色。
据我了解@RunAs
这应该可行。
但是,我得到以下异常(class 并且角色名称已更改以匹配我的示例):
javax.ejb.NoSuchEJBException: An error occurred during initialization of singleton session bean MY_Appl#myappl-ejb.jar#PIRSingletonEJB, resulting in the discarding of the singleton instance.; nested exception is: javax.ejb.EJBAccessException: SECJ0053E: Authorization failed for wasldaphost:389/SOMEUSER while invoking (Bean)MY_Appl#myappl-ejb.jar#SomeServiceBean someMethodInSomeLocalServiceType::3 is not granted any of the required roles: SomeRole
Caused by: javax.ejb.EJBAccessException: SECJ0053E: Authorization failed for wasldaphost:389/SOMEUSER while invoking (Bean)MY_Appl#myappl-ejb.jar#SomeServiceBean someMethodInSomeLocalServiceType::3 is not granted any of the required roles: SomeRole
这只是我对它应该如何工作的误解吗?
我正在使用 WebSphere 8.0.0.9
你必须做两件事:
- 在管理控制台的
Security role to user mapping
中,您必须将 SOMEUSER
添加到 SomeRole
- 然后在
RunAs role mapping
中,您必须从 SomeRole 中指定一个特定用户(在您的情况下 SOMEUSER
)并为他提供密码。
这两个设置都是必需的,因为容器必须具有 RunAs 的用户 ID 和密码,而且该用户必须是应使用的角色的有效用户。 (您不能 运行 只是角色,它必须是具有该角色的特定用户)。
PS。我手头没有控制台,因此链接在控制台中的调用方式可能会有所不同,但您应该明白了。
有关详细信息,请查看 Assigning users to RunAs roles
这是
我有以下场景:
EJB 1:
@WebService( ... )
@Local(SomeLocalServiceType.class)
@Stateless
@RolesAllowed("SomeRole")
public class SomeServiceBean implements SomeLocalServiceType {
...
@Override
public void someMethodInSomeLocalServiceType() { ... }
...
}
EJB 2:
@Startup
@Singleton
@RunAs("SomeRole")
public class PIRSingletonEJB {
@EJB
private SomeLocalServiceType service;
...
@PostContruct
public void performStartupAction() {
service.someMethodInSomeLocalServiceType();
}
}
简而言之:我有一个 EJB 需要角色 "SomeRole",还有一个启动 EJB 使用 @RunAs
来使用该角色。
据我了解@RunAs
这应该可行。
但是,我得到以下异常(class 并且角色名称已更改以匹配我的示例):
javax.ejb.NoSuchEJBException: An error occurred during initialization of singleton session bean MY_Appl#myappl-ejb.jar#PIRSingletonEJB, resulting in the discarding of the singleton instance.; nested exception is: javax.ejb.EJBAccessException: SECJ0053E: Authorization failed for wasldaphost:389/SOMEUSER while invoking (Bean)MY_Appl#myappl-ejb.jar#SomeServiceBean someMethodInSomeLocalServiceType::3 is not granted any of the required roles: SomeRole
Caused by: javax.ejb.EJBAccessException: SECJ0053E: Authorization failed for wasldaphost:389/SOMEUSER while invoking (Bean)MY_Appl#myappl-ejb.jar#SomeServiceBean someMethodInSomeLocalServiceType::3 is not granted any of the required roles: SomeRole
这只是我对它应该如何工作的误解吗?
我正在使用 WebSphere 8.0.0.9
你必须做两件事:
- 在管理控制台的
Security role to user mapping
中,您必须将SOMEUSER
添加到SomeRole
- 然后在
RunAs role mapping
中,您必须从 SomeRole 中指定一个特定用户(在您的情况下SOMEUSER
)并为他提供密码。
这两个设置都是必需的,因为容器必须具有 RunAs 的用户 ID 和密码,而且该用户必须是应使用的角色的有效用户。 (您不能 运行 只是角色,它必须是具有该角色的特定用户)。
PS。我手头没有控制台,因此链接在控制台中的调用方式可能会有所不同,但您应该明白了。
有关详细信息,请查看 Assigning users to RunAs roles