2013-08-27 42 views
1

我的應用程序由服務器託管的,和其他應用程序由服務器B.「其他應用程序」託管安全角色有時會發布到我的應用程序的請求,並在請求標題,我可以獲取用戶標識。是否有可能通過由「其他應用程序」發佈的此用戶標識獲取用戶安全角色。所有來自服務器B的請求都是可信的。如何獲得與在WebSphere Application Server的用戶ID

我使用WebSphere Application Server 8.0.0.5

更新

讓我重新整理的情況下,並沒有使用 「服務器」 這個時候。有A,B,C應用程序。當從「用戶」特定用戶請求進行到A,A將發佈一個事件JMS到B,然後B發送請求以C. C是我的應用程序,而B是「其它應用」我在上面提到。所以,從B到C的請求不是一個認證請求(不能從請求實例中獲得主體)。而且我可以從請求頭獲得所有用戶的ID。

  1. 我不能夠使用isUserInRole方法
  2. 角色由WebSphere管理的

回答

1

至於該servlet/EJB API,你只能如果用戶是有一定的作用檢查,但是無法獲得分配角色的列表。

如果在請求頭獲取用戶通過服務器A驗證,你可以叫HttpServletRequest.isUserInRole針對已知角色名的列表。

在你的情況下,用戶可能不被服務器A認證(因爲有信任),所以這是不可能的 - 沒有官方的API。我不知道有特定於WebSphere的API。

選項(所有這些只適用,如果有一個真正的信任)

  1. 服務器B可以在請求標頭中傳遞的作用(S)以及
  2. 實現一個EJB/web服務等在服務器B,所以該服務器可以查詢給定用戶
  3. 的角色,如果角色是由外部系統管理(LDAP等),你可以從該系統中獲取角色

更新(考慮其變化方案中的評論)

  • B可以把主叫用戶的角色在消息屬性爲好。

  • B關於C可認證(C要求的B認證)

  • 如果你不能做到這一點,你不能從WebSphere或任何其他外部系統(LDAP爲例)的作用都不是,那麼我我不知道另一種可能性。

+0

有三種申請參與。讓我換個方案,而不是這次使用「服務器」。有A,B,C應用程序。當來自「用戶」的特定用戶請求轉到A時,A將向B發佈JMS事件,然後B向C發送請求.C是我的應用程序,B是我上面提到的「另一個應用程序」。所以,從B到C的請求不是一個認證請求(不能從請求實例中獲得主體)。而且我可以從請求頭獲得所有用戶的ID。 1)我無法使用'isUserInRole'方法 2)角色由websphere管理 – Bomin

+0

@Bomin我已更新我的答案,並將您的評論置於問題中。 – Beryllium

相關問題