- 有哪些優勢獲得本金如春控制器參數
Principal principal
,然後把它傳遞給服務層之上,雖然SecurityContextHolder.getContext().getAuthentication().getPrincipal()
在服務層立即獲得本金? - 什麼是在沒有檢查
getAuthentication()
和getPrincipal()
對象的情況下在服務層獲取主要細節的最佳方法(類似於自定義包裝器)?
回答
-
- 您的服務API將更加易於使用。您將直接看到對主體的依賴關係,因此您不會在主體不存在的環境中錯誤地調用某種服務方法。
- 通常,對SpringSecurity代碼的較少依賴意味着在遷移到新的Spring Security版本時,問題較少。
- 您將能夠在Spring Security不存在的環境中重用您的服務層。
- 準備一些包裝類(例如AuthenticationService)。將getPrincipal()方法添加到它。實施你的支票。將AuthenticationService直接調用到SecurityContextHolder的任何地方。
如果我需要爲特定用戶獲取一些數據,我認爲在服務層獲得一個主體(例如用戶名)更安全,因爲此(限制)和數據庫之間的層數較少。所以這是唯一的道,而不是在控制器中獲得委託人(其間的附加服務層)。但另一方面,正如你所說的,服務層可以更加可重用。你對此有何看法? – Alex 2013-02-13 00:32:53
主要對象由web層保存並保留。所以對我來說,委託人從控制器到服務層看起來很自然。還有一點是靜態依賴對單元測試不利:http://misko.hevery.com/2008/12/15/static-methods-are-death-to-testability/。我沒有看到任何安全問題,因爲一個pincipal實例是不可變的(通常密碼在這個時候將從實際實現中被擦除)。不好意思推遲了。我很長時間是AFK。 – 2013-02-27 18:08:40
在擴展BaseService(服務層)中使用您的選項2是否安全? – Alex 2013-03-07 12:40:19
- 1. 如何獲得騾子流中的騾子安全上下文或安全主要參考
- 2. 使用javascript從總計認證Web服務獲得安全上下文令牌
- 3. 從Spring MVC控制器的安全上下文獲取UserDetails對象
- 4. 我可以通過spring安全性獲得多個安全上下文嗎?
- 5. 如何在jsp中獲得spring安全角色層次結構?
- 6. Spring安全註解在服務層上不起作用
- 7. 服務器主體「DevMe」不能在當前安全上下文
- 8. Spring Web:通過Spring服務從服務中下載文件
- 9. 無法從Spring-Jersey中檢索安全上下文
- 10. Spring MVC上傳,生成並下載文件的安全方式
- 11. 在沒有HttpServletRequest的Spring服務中獲取上下文url
- 12. 帶有全局上下文上下文的Spring MVC Annotations:component-scan?
- 13. CRM 2011 SDK - 從服務上下文獲取底層IOrganizationService
- 14. Spring安全子線程上下文
- 15. Spring安全上下文和@Repository bean
- 16. 獲取服務中的上下文
- 17. Spring 3 MVC +安全
- 18. Spring-mvc和Ajax jquery:無法從服務器獲得響應
- 19. 瞭解Spring MVC中的上下文
- 20. Spring MVC和JSON中的安全性
- 21. 微服務層之間的安全性
- 22. 在n層圖層上的mvc上的Servicestack安全性
- 23. Spring MVC的安全自動登錄使用CAS服務器JASIG
- 24. 用彈簧安全提取服務層中登錄的用戶
- 25. 如何通過安全層訪問grails中的web服務
- 26. 服務器主體Xuser無法在當前安全上下文中訪問數據庫Ydb。 SQL服務器2008
- 27. 春天Spring MVC的安全
- 28. 獲得想要的字符從服務
- 29. 從上下文中獲得標題
- 30. 如何在wcf restfull服務中獲得安全性?
你可能會找到[這個問題]的答案(http://stackoverflow.com/questions/248562/when-using-spring-security-what-is-the-proper-way-to-obtain- current-username-i)有用。 [這個答案](http://stackoverflow.com/questions/8764545/best-practice-for-getting-active-users-userdetails/8765597#8765597)也可能有用。 – 2013-02-13 14:13:34
這是一個很好的解決方案,讓抽象類與靜態方法,我可以把'SecurityContextHolder.getContext()。getAuthentication()。getPrincipal()'?之後,我可以在服務層中使用它。 – Alex 2013-02-14 00:40:24
閱讀我給你的第二個鏈接。沒有什麼可以阻止你在你的服務中使用這種方法,並且如果你使用一個接口,你也可以將它交換出來進行測試。 – 2013-02-14 01:59:29