2012-06-13 189 views
5

一般情況:一個簡單的應用程序,通過EJB(3.1)公開其服務的簡單應用程序 - 其中大部分是無狀態會話bean(這裏沒有什麼樂趣)和基於SWING的客戶端即通過遠程接口調用這些服務並做他們必須做的事情。Swing客戶端上的Apache Shiro - EJB 3.1身份驗證授權

安全:我想認證/授權這個呼叫週期,當然保護我的服務。顯而易見的答案是在服務器中使用JAAS以及底層服務器上的任何自定義佈線設置。這仍是一個選項

阿帕奇四郎:所以很多人談論阿帕奇四郎確實也有很簡單的API和機制 - 這可能是獨立的應用服務器。

技術問題:

  1. 會議:對我來說,我沒有一個HTTP會話 - 從我所瞭解四郎至少需要某種形式的會話ID,我需要傳閱。在我的RMI/IIOP調用服務器時注入用戶憑證的任何好方法都不會污染我的業務API?

  2. 服務器端實現:對於我經歷的少數資源,我想我可以通過從Singleton Ejb 3.1 bean引用它來實現Shiro DefaultSecurityManager。任何其他想法? 然後,我可以很容易地創建一個攔截器並將其添加到我的遠程調用 - 所以當一個新的調用正在通過我的遠程EJB方法 - Shiro Intereceptor來驗證我的用戶或檢查特定的權限。

任何意見/提示/例子?

非常感謝

回答

0

從shiro,嘗試使用ServiceLocator模式。 EJB的查找在容器(JBoss,Netweaver,Weblogig等)之間是不同的。

在Application Server中,嘗試使用基於容器的安全約束(@RolesAllowed,@ PermitAll,@ Deny ...)。 JAAS將創建用戶主體的主題,所以只需使用容器授權(@RolesAllowed,@PermitAll,@Deny ...)。從一個容器遷移到其他容器時可能會更好。

+0

您好Marcelo,感謝您的回答 - 但是如果我即將使用JAAS - 那麼我沒有發現任何配線shiro的巨大優勢。我的想法是通過100%JAAS並使用Shiro實施所有任務。 – javapapo

+0

好的。如果您認爲使應用程序依賴於shiro的供應商沒有問題,則沒有問題。我的意思是,如果你使用容器,cotainer已經有了安全實現。您可能會失去一些功能,如web.xml約束或註釋約束安全性。 – Marcelo