我有一個JEE6應用程序,駐留在Glassfish 3.1.1上,它通過一些REST資源向遠程客戶端提供服務。一些資源需要認證,其他資源則不需要。JEE6:自定義領域vs ResourceFilter - 哪一個更適合REST資源驗證?
目前我使用HTTP基本認證來保護安全資源,實現爲自定義領域/ LoginModule。如果身份驗證失敗,則登錄模塊會拋出一個LoginException
Glassfish映射到HTTP 401.如果身份驗證成功,則資源可以訪問securityContext
中的userPrincipal
。
雖然它的工作,它確實讓我煩惱,我不能攔截LoginException
。我的客戶期望xml或json;在HTTP 401正文中,Glassfish爲它們提供了text/html。所有其他應用程序異常我都可以用ExceptionMapper
進行截取,而不是LoginException。
目前我正在考慮用ResourceFilter
替換自定義領域,我將手動進行HTTP基本身份驗證。我希望如果我在這裏拋出一個異常,它會被截取並正確映射/編組。
我的問題是:
- 它是用於身份驗證的
ResourceFilter
一個好主意?性能如何? - 我該如何讓REST資源知道誰剛獲得身份驗證(誰是userPrinicipal)?
順便說一句,我已經實現了它作爲一個ResourceFilter和一個Injectable UserProvider。如果有人有興趣,我很高興發佈代碼。不回答我的問題,如果它是一個好主意,但:) – Hank