我正在使用GlassFish 3.1,並希望使用容器驗證。 當我開始在web.xml中編寫安全約束時,我感覺url模式幾乎沒有靈活性。 章12.2在Servlet 3.0規範描述了有效的URL模式的servlet映射:Web.xml:爲什麼在安全約束中對url模式的靈活性很差?
- 列表項
- /事/ *爲路徑映射
- *。擴展名的擴展名映射
- 精確映射
- 默認和上下文根例
12.1描述了匹配算法 和第2點狀態: 容器將遞歸嘗試匹配最長的路徑前綴。這是通過將路徑樹一次一個地刪除一個目錄,使用'/'作爲 路徑分隔符來完成的 。最長的匹配決定了所選的servlet。
安全約束在第13章和13.8.3中描述,似乎url-patterns和匹配算法與servlet的相同。
想象一下,您有一個遺留應用程序,其中包含以下列方式組織的JSF頁面: 每個實體類都有一個實體名稱包含4個JSF文件(List,edit,create,view)的目錄。 如果你想保護編輯和創建頁面的權限,該怎麼辦?在我看來,你只能在url-pattern中使用'精確匹配',所以你必須爲你想要保護的每個頁面編寫一個約束,這個約束非常冗長而且乏味,容易出錯。 此外,如果我使用路徑映射規則保護整個目錄(例如/customers/*),我看不到任何方式可以解除該目錄中特定頁面的約束(例如,如果要釋放訪問到受保護目錄內的頁面'列表')。
在與Glassfish的3.1我的實驗中注意到了這個怪異的行爲: 路徑映射工作得很好,只有當他們從上下文根絕,所以使用JSF默認配置就必須以「/面向」開始。如果我寫/customers/而不是/faces/customers/不評估安全約束。據我所知,這與12.1(上面報告)中所述的內容相反。
有人可以瞭解如何有效地使用url-pattern來定義安全約束嗎? 顯然,您可以將所有敏感的JSF放入'/受保護的'目錄中,但這是一種非常侵入性的方式,可以實現破壞JSF任何邏輯順序的安全目標。
感謝 菲利波
我有點困惑。 – Filippo
完成我以前的評論。這裏[鏈接](http://netbeans.org/kb/trails/java-ee.html)我找到了一些關於Web應用程序安全性的教程,並且他們都使用容器身份驗證和授權機制。我開始認爲如果你不能將它們適應於真實的案例,這些教程完全浪費時間。我希望找到使用容器授權的人,但似乎每個人都依賴第三方庫來保證安全......我錯了嗎? – Filippo
@菲利波:我認爲值得看看教程。今天使用的授權(我也使用它),我只是在某個時間點的經驗,你已經到了一個不足夠的地步,例如,數據級別安全性。所以你必須決定開始使用JEE授權是否合理。請記住,身份驗證沒問題。 – home