【发布时间】:2016-01-12 03:00:36
【问题描述】:
这是User context for @Startup EJB on websphere的后续行动
我有以下场景:
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();
}
}
简而言之:我有一个需要角色“SomeRole”的 EJB,以及一个使用 @RunAs 的启动 EJB 来使用该角色。
据我所知@RunAs 这应该可以工作。
但是,我得到以下异常(类和角色名称已更改以匹配我的示例):
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
【问题讨论】:
-
我对WebSphere应用安全只有一个基本的了解,但我的理解是当你指定
@RunAs("SomeRole")时,你需要配置将要使用的具体用户,看来你已经配置好了SOMEUSER 用于此目的。此外,您需要将 SOMEUSER 配置为 SomeRole 角色的成员以进行访问检查,但您似乎还没有这样做。 (我不确定,这只是我最好的猜测。如果它是正确的,那么很遗憾 WebSphere 没有检测到这个悖论。) -
我没有为此配置 SOMEUSER。这是我的另一个问题:WAS 正在使用该用户,但我找不到如何设置它。
-
如果我必须将用户配置为具有 SomeRole 角色,那我为什么需要
@RunAs?用户将自动被允许调用第二个 EJB,不是吗?
标签: java ejb websphere websphere-8