2017-08-10 83 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: