当前位置: 首页 > 面试题库 >

无法使@RunAs在EJB中工作

拓拔飞飙
2023-03-14
问题内容

这是Websphere上@StartupEJB的用户上下文的后续操作

我有以下情况:

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”,以及一个@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


问题答案:

您必须做两件事:

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

这两个设置都是必需的,因为容器必须具有RunAs的用户ID和密码,并且该用户对于要使用的角色也必须是有效用户。(您不能仅以角色身份运行,它必须是具有该角色的特定用户)。

PS。我手头没有控制台,因此在控制台中链接的名称可能有所不同,但是您应该明白这一点。

有关更多详细信息,请参见将用户分配给RunAs角色



 类似资料:
  • 指定在后续所有的 Run 和 RunWait 中使用的一组用户凭据。 RunAs [, User, Password, Domain] 参数 User 如果省略此参数和其他所有参数, 则关闭 RunAs 的功能, 这样会恢复 Run 和 RunWait 到它们默认的行为. 否则, 它为用来创建新进程的用户名. Password User 的密码. Domain User 域. 要使用本地账户, 请

  • 问题内容: 构造bean之后,我想使用EntityManager从数据库中检索数据。在构造函数中是不可能的,因为EntityManager是在调用构造函数之后注入的。所以我试图用@PostConstruct注释的方法来做。根据API,在完成所有注入后将调用PostConstruct方法。执行查询是可行的,但是它总是返回一个空列表。如果我在其他方法中使用相同的查询,它将返回正确的结果。有人知道,为什

  • 我正在尝试将JMS队列注入到无状态EJB中。我的代码看起来是这样的: 当我试图将其部署到应用程序服务器(Wildfly 9.0.2)时,引发了以下异常 如果我将mappedName更改为远程JNDI名称,它就会起作用 或者我将无状态EJB切换到一个依赖的CDI Bean Wildfly配置如下所示: 那么,为什么不能将JMS队列注入到无状态EJB中,为什么它可以在CDI bean中工作呢?我做错了

  • 我目前正在努力让远程EJB调用在wildfly(8.x和9.x)上工作。 详细来说,它是关于使用EJB客户机API方法从独立的客户机应用程序(而不是从另一个应用程序服务器)进行远程调用。远程命名方法适合我,但不适用于我的场景,因为我需要使用客户端拦截器将上下文数据传递给服务器端拦截器进行远程调用。 但是现在,为了一个简单的示例,我尝试使用客户机API进行远程调用。因此,我尝试了用于远程ejb调用的

  • 我正在写一个小的递归算法。代码如下: 我得到以下错误: 在 /usr/lib/gcc/x86_64-redhat-linux/4.4中包含的文件中。7/../../../../包括/c/4.4。7/算法:62, 来自燃烧硬币。cpp:3:/usr/lib/gcc/x86_64-redhat-linux/4.4。7/../../../../包括/c/4.4。7位/stl_算法。h: 在函数“\u F

  • 这是我第一次面对这个问题,但想不出原因。 我正在使用d3创建一个冰柱图。 有一个click事件正在激发并调用。我看到控制台日志,这意味着我确实有权访问,但当我尝试设置它时,什么也没有发生:没有新页面,没有错误页面,什么也没有!