我正在學習JASPIC,我從頭開始一個小項目來探索它以及它如何在Wildfly上運行。第一步是調用我的SAM validateRequest
方法並返回不受保護資源的內容,即index.html
頁面。好的,validateRequest
被調用。我檢查是否MessageInfo
javax.security.auth.message.MessagePolicy.isMandatory
屬性設置爲false
。困難時期來臨了。在我第一次嘗試,如果屬性設置爲假validateRequest
返回AUTH_SUCCESS
值,但瀏覽器找回403
錯誤。在我的第二次嘗試validateRequest
返回null
,瀏覽器取回200
,但它沒有響應數據(沒有關於index.html
)。我該如何正確處理servlet請求? 你可以找到來源here。謝謝。Jaspic:處理訪問不受保護的資源
回答
我該如何正確處理servlet請求?
瞭解並遵守specification的相關章節。對於典型的Servlet爲本ServerAuthModule
(SAM),這些都是:
- 服務器側消息處理模型的一般概述(點2是其中
validateRequest
被調用),由§1.2.5提供和§2.1 .5.2。後面的內容以及第25頁模型的狀態圖(PDF中的第39頁)非常重要。 - 上述HTTP Servlet容器配置文件的專業化見§3.8.3.2,§3.8.4和§3.9。
當然,由於您也實施了工廠,因此您應該注意不同重要性的其他細節,因此您可能很難避免閱讀第一個三章完整。
從validateRequest
返回SUCCESS
每當validateRequest
實現您的SAM的是返回AuthStatus.SUCCESS
(null
是不一個選項),它必須傳達呼叫者的身份向(Servlet的)運行時之前不管來電者是否已經過身份驗證或匿名,都可以返回。這可以通過CallerPrincipalCallback
和/或至少一個GroupPrincipalCallback
(可以通過運行時提供的CallbackHandler
將組分配給匿名調用者)來完成。使用null Principal
(名稱)參數構造這些回調中的任何一個,都會向運行時指示該調用方被認爲是匿名的,或者沒有任何組將與其關聯。同樣,請注意,兼容運行時沒有默認的匿名調用者假設;必須明確告知,否則結果是不確定的。
的SUCCESS
語義該請求將被允許傳播到(-基於Servlet)服務端點,當且僅當基 - (角色的)基於呼叫者授權成功。然而,爲了進行授權,運行時必須知道主叫方的身份,這就是爲什麼上述回調是必要的。
AuthStatus
值VS HTTP響應狀態碼
兩者之間的關係可以是一點點混亂。前者是協議中立的,並且在消息處理模型中基本上是狀態轉換標籤。理論上它們限制了後者;在實踐中,由於多個組件和應用程序服務器本身可能會改變響應的狀態,因此建議您自己將其分配到非返回情況下的非AuthStatus.SUCCESS
/AuthStatus.SEND_SUCCESS
validateRequest
/secureResponse
。
- 1. Jaspic:處理訪問受保護的資源
- 2. Withings API - 訪問受保護的資源
- 3. Ajax訪問受保護的資源
- 4. Spring oauth2指定受保護和不受保護的資源
- 5. 如何學習處理受保護資源的HTTP請求?
- 6. 訪問Google App Engine上的受oauth保護的資源
- 7. 受保護的資源在Spring-Security-Oauth2中無access_token訪問
- 8. Python - 訪問受保護的網絡資源
- 9. 發佈到受基本訪問授權保護的資源
- 10. 從授權服務器訪問受保護資源
- 11. C++受保護的訪問
- 12. 受保護的訪問
- 13. 春返回受保護的資源
- 14. 不能訪問受保護的特性
- 15. 哪種資源受QMutex保護?
- 16. 在Oauth 1.0a中處理受保護資源的正確方法是什麼?
- 17. 如何配置access_token可以訪問哪個受保護的資源?所有的
- 18. 訪問受保護的資源API提供了「401未授權」錯誤
- 19. 如何訪問我保存爲資源的批處理文件?
- 20. spring oAuth2不保護資源
- 21. 可以訪問春天的oauth2保護資源而不訪問令牌
- 22. 免費訪問受保護的成員
- 23. C#訪問受保護的領域
- 24. 訪問Android類的受保護變量
- 25. 無法訪問受保護的成員
- 26. 訪問受保護的繼承
- 27. 訪問受保護的成員
- 28. 錯誤訪問受保護的成員
- 29. 訪問受密碼保護的URL
- 30. 無法訪問受保護的成員?
您是否試過首先'處理'新的CallerPrincipalCallback(clientSubject,null)',然後返回'AuthStatus.SUCCESS'? *必須*根據規範工作(如果您的WildFly版本正確實施它)。 – Uux
你說得對。請回答你的評論,以便我可以接受。 – Francesco