2017-08-10 25 views
0

我正在使用javax.ws.rs實現REST API。實現目標是儘可能安全,所以每個輸入都應該被驗證。如何使用javax.ws.rs執行輸入驗證?

對於輸入驗證,我正在實施一個實現HttpServletRequest的公共類ValidatingHttpRequest

我可以識別11個甚至被調用的方法,所有其他的方法現在扔UnsupportedOperationException。然而,其中一些方法處理REST框架明顯使用的東西。例如,我的代碼並不關心標題,但調用了getHeaders。通過大量的逆向工程,我將能夠找出使用哪些頭文件並進行驗證,當然,我也可以進行驗證。可能會引入非最佳行爲和可能的一些錯誤。並且HTTP請求有一些類似的方面。

但之前沒有人這樣做過,可能有人知道REST框架是如何工作的?還是沒有必要,因爲框架本身不能被愚弄?

所以我正在尋找一個完全驗證的HttpServletRequest實現,或者說爲什麼在這種情況下沒有必要的推理。當然,我將使用實現來驗證請求主體和參數。

回答

2

我正在使用javax.ws.rs實現REST API。 [...]對於輸入驗證,我正在實施一個實現HttpServletRequest的公共類ValidatingHttpRequest

您錯過了JAX-RS的重點。在JAX-RS中,您處理註釋的資源類和方法,因此您無需編寫「低級別」Servlets。

我要尋找一個完全驗證HttpServletRequest實施,或推理爲什麼它是在這種情況下沒有必要。

你絕對不想(和不需要)來編寫用於驗證一個Servlet。

JAX-RS的實現例如Jersey,RESTEasy和Apache CXF支持Bean Validation,這是一種基於批註的API來驗證Java Beans。您可以驗證幾乎所有您需要的內容,包括請求標頭,參數和實體。

查看JAX-RS specification的第7章,它描述了驗證是如何工作的。然而,整合Bean驗證與JAX-RS實現,你希望看到的特定供應商的documentantion: