2016-07-22 80 views
2

我正在學習JASPIC,我從頭開始一個小項目來探索它以及它如何在Wildfly上運行。第一步是調用我的SAM validateRequest方法並返回不受保護資源的內容,即index.html頁面。好的,validateRequest被調用。我檢查是否MessageInfojavax.security.auth.message.MessagePolicy.isMandatory屬性設置爲false。困難時期來臨了。在我第一次嘗試,如果屬性設置爲假validateRequest返回AUTH_SUCCESS值,但瀏覽器找回403錯誤。在我的第二次嘗試validateRequest返回null,瀏覽器取回200,但它沒有響應數據(沒有關於index.html)。我該如何正確處理servlet請求? 你可以找到來源here。謝謝。Jaspic:處理訪問不受保護的資源

+2

您是否試過首先'處理'新的CallerPrincipalCallback(clientSubject,null)',然後返回'AuthStatus.SUCCESS'? *必須*根據規範工作(如果您的WildFly版本正確實施它)。 – Uux

+0

你說得對。請回答你的評論,以便我可以接受。 – Francesco

回答

2

我該如何正確處理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.SUCCESSnull一個選項),它必須傳達呼叫者的身份向(Servlet的)運行時之前不管來電者是否已經過身份驗證或匿名,都可以返回。這可以通過CallerPrincipalCallback和/或至少一個GroupPrincipalCallback(可以通過運行時提供的CallbackHandler將組分配給匿名調用者)來完成。使用null Principal(名稱)參數構造這些回調中的任何一個,都會向運行時指示該調用方被認爲是匿名的,或者沒有任何組將與其關聯。同樣,請注意,兼容運行時沒有默認的匿名調用者假設;必須明確告知,否則結果是不確定的。

SUCCESS語義該請求將被允許傳播到(-基於Servlet)服務端點,當且僅當基 - (角色的)基於呼叫者授權成功。然而,爲了進行授權,運行時必須知道主叫方的身份,這就是爲什麼上述回調是必要的。

AuthStatus值VS HTTP響應狀態碼

兩者之間的關係可以是一點點混亂。前者是協議中立的,並且在消息處理模型中基本上是狀態轉換標籤。理論上它們限制了後者;在實踐中,由於多個組件和應用程序服務器本身可能會改變響應的狀態,因此建議您自己將其分配到非返回情況下的非AuthStatus.SUCCESS/AuthStatus.SEND_SUCCESSvalidateRequest/secureResponse