【问题标题】:Can't get @RunAs to work in an EJB无法让 @RunAs 在 EJB 中工作
【发布时间】: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


【解决方案1】:

你必须做两件事:

  • 在管理控制台中,在Security role to user mapping 中,您必须将您的SOMEUSER 添加到SomeRole
  • 然后在RunAs role mapping 中,您必须从SomeRole 中指定一个特定用户(在您的情况下为SOMEUSER)并为他提供密码。

这两项设置都是必需的,因为容器必须具有 RunAs 的用户 ID 和密码,并且该用户必须是应使用角色的有效用户。 (您不能只作为角色运行,它必须是具有该角色的特定用户)。

PS。我手头没有控制台,因此在控制台中链接的调用方式可能会有所不同,但您应该明白。

更多详情请查看Assigning users to RunAs roles

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 2018-02-26
    相关资源
    最近更新 更多