如何使用javax.ws.rs执行输入验证?

时间:2017-08-10 09:29:24

标签: java web-services validation jax-rs

我正在使用javax.ws.rs实现REST API。实现目标是尽可能安全,因此应验证每个输入。

对于输入验证,我正在实现一个实现ValidatingHttpRequest的公共类HttpServletRequest

我可以识别出11个甚至被调用的方法,其他所有方法现在抛出UnsupportedOperationException。但是,其中一些方法处理REST框架显然使用的内容。例如,我的代码不关心标题,但会调用getHeaders。通过大量的逆向工程,我将能够找出使用的标头,并且应该进行验证,当然我可以进行验证。可能会引入非最佳行为,也可能是一些错误。并且HTTP请求有一些类似的方面。

但之前没有人这样做过,可能有人真正知道REST框架是如何工作的?或者是不必要的,因为框架本身不能被愚弄?

所以我正在寻找一个完全验证的HttpServletRequest实现,或者说是为什么在这种情况下没有必要。当然,我将使用实现来验证请求正文和参数。

1 个答案:

答案 0 :(得分:8)

  

我正在使用javax.ws.rs实现REST API。 [...]对于输入验证,我正在实现一个实现ValidatingHttpRequest的公共类HttpServletRequest

你错过了JAX-RS的全部内容。在JAX-RS中,您处理带注释的资源类和方法,因此您不需要编写“低级”Servlet。

  

我正在寻找一个完全验证的HttpServletRequest实现,或者说明为什么在这种情况下没有必要。

您肯定不希望(并且不需要)来编写Servlet以进行验证。

JAX-RS实现(如Jersey,RESTEasy和Apache CXF)支持Bean Validation,这是一种基于注释的API,用于验证Java Bean。您几乎可以验证所需的一切,包括请求标头,参数和实体。

查看JAX-RS specification的第7章,它描述了验证的工作原理。但是,要将Bean Validation与JAX-RS实现集成,您希望查看特定于供应商的文档: