无法让@RunAs在EJB中工作

时间:2015-10-14 06:40:10

标签: java ejb websphere websphere-8

这是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();
        }

}

简而言之:我有一个EJB需要一个角色“SomeRole”,一个启动EJB使用@RunAs来使用该角色。

据我所知,@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

1 个答案:

答案 0 :(得分:4)

你必须做两件事:

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

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

PS。我手头没有控制台,所以在控制台中链接可能会有所不同,但你应该明白这一点。

有关详细信息,请查看Assigning users to RunAs roles