2015-10-14 24 views
1

這是一個後續User context for @Startup EJB on websphere無法取得@RunAs在一個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(); 
     } 

} 

簡而言之:我有一個需要角色「SomeRole」的EJB和一個使用@RunAs的啓動EJB來使用該r OLE。

據我瞭解@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

+0

我只有WebSphere應用程序安全性的一個基本的瞭解,但我的理解是,當你使用'@RunAs(「SomeRole」)',你需要配置將特定用戶被使用,並且它似乎已經爲此目的配置了SOMEUSER。此外,您需要將SOMEUSER配置爲訪問檢查的SomeRole角色的成員,但看起來您還沒有這樣做。 (我不知道,這只是我的最佳猜測,如果它是正確的,那麼WebSphere不會檢測到這種悖論是非常不幸的。) –

+0

我有*沒有*爲此配置了SOMEUSER。這是我的另一個問題:WAS正在使用該用戶,而我無法找到如何設置它。 –

+0

如果我必須配置用戶具有角色SomeRole,那麼爲什麼我需要'@ RunAs'呢?用戶會自動被允許調用第二個EJB,不是嗎? –

回答

3

你必須做兩件事情:

  • 在管理控制檯,在Security role to user mapping必須添加您的SOMEUSERSomeRole
  • 然後在RunAs role mapping您必須從SomeRole中指定一個特定用戶(在您的案例中爲SOMEUSER)併爲他提供密碼。

這兩個設置都是必需的,因爲容器必須具有RunAs的userid和password,並且該用戶必須是應該使用的角色的有效用戶。 (您不能像角色一樣運行,它必須是具有該角色的特定用戶)。

PS。我手邊沒有控制檯,因此控制檯中的鏈接可能有點不同,但您應該明白。

有關詳情,請Assigning users to RunAs roles