2011-08-22 112 views
0

我正在使用GlassFish 3.1,並希望使用容器驗證。 當我開始在web.xml中編寫安全約束時,我感覺url模式幾乎沒有靈活性。 章12.2在Servlet 3.0規範描述了有效的URL模式的servlet映射:Web.xml:爲什麼在安全約束中對url模式的靈活性很差?

  1. 列表項
  2. /事/ *爲路徑映射
  3. *。擴展名的擴展名映射
  4. 精確映射
  5. 默認和上下文根例

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任何邏輯順序的安全目標。

感謝 菲利波

回答

1

有人可以闡明如何的url-pattern可以有效地用於定義安全約束一些輕?

經過幾年的Java EE,我覺得Java EE安全約束對於僅用於身份驗證是有用的。如果涉及授權(是授權執行特定操作的已知實體),則此安全模型會失敗,因爲它過於籠統(取決於URL)。你可以看看例如Spring Security。根據用例的複雜性,您可以考慮自己構建 - 特別是在涉及以數據爲中心的安全性時(例如,只有組織A中的用戶可以修改由組織B提供的數據)。

不是一個真正的答案,但我的意見...

+0

我有點困惑。 – Filippo

+0

完成我以前的評論。這裏[鏈接](http://netbeans.org/kb/trails/java-ee.html)我找到了一些關於Web應用程序安全性的教程,並且他們都使用容器身份驗證和授權機制。我開始認爲如果你不能將它們適應於真實的案例,這些教程完全浪費時間。我希望找到使用容器授權的人,但似乎每個人都依賴第三方庫來保證安全......我錯了嗎? – Filippo

+0

@菲利波:我認爲值得看看教程。今天使用的授權(我也使用它),我只是在某個時間點的經驗,你已經到了一個不足夠的地步,例如,數據級別安全性。所以你必須決定開始使用JEE授權是否合理。請記住,身份驗證沒問題。 – home