2011-05-13 42 views
0

我想創建各種服務,如:彈簧休眠服務/ DAO安全設計查詢

UserService 
UserPermissionService 
AddressBookService 

這將訪問DAO的如:

UserDao 
UserPermissionDao 
AddressBookDao 
CompanyDao 

這些都將使用Spring,Hibernate的堆棧並封裝在多個webapps的後端jar中。我希望服務功能可用,具體取決於調用用戶對象的權限。另外,調用者(用戶)對象將具有主叫用戶的權限。

查詢:我應該將Caller傳遞給每個Service方法調用,然後檢查其權限嗎?或者有更好的方法使用「Spring/AOP」和/或「工廠模式」,其中調用方對象可用於服務方法。

回答

2

這種情況下的模式之一是將安全令牌存儲在一個ThreadLocal中,並要求在服務方法中首先從該令牌獲得相應的權限。

+0

謝謝,你讓我在正確的方向思考。在看以下問題後:http://stackoverflow.com/questions/2218282/should-i-put-my-threadlocals-in-a-spring-injected-singleton->我認爲會議範圍呼叫者對象是最好的案件。這本身會被注入到服務實現中。 – AM01 2011-05-13 21:32:03

+0

我們在應用程序中實現這個功能的方式是允許應用程序代碼(我們或通過服務API的第三方)調用服務並登錄到通過服務方法調用執行的審覈日誌配置更改。但是對於來自Web應用程序的請求,我們的確通過HttpServletRequest中的getUserPrincipal()獲取用戶。 – Olaf 2011-05-13 21:39:55