我正在使用javax.ws.rs
实现REST API。实现目标是尽可能安全,因此应验证每个输入。
对于输入验证,我正在实现一个实现ValidatingHttpRequest
的公共类HttpServletRequest
。
我可以识别出11个甚至被调用的方法,其他所有方法现在抛出UnsupportedOperationException
。但是,其中一些方法处理REST框架显然使用的内容。例如,我的代码不关心标题,但会调用getHeaders
。通过大量的逆向工程,我将能够找出使用的标头,并且应该进行验证,当然我可以进行验证。可能会引入非最佳行为,也可能是一些错误。并且HTTP请求有一些类似的方面。
但之前没有人这样做过,可能有人真正知道REST框架是如何工作的?或者是不必要的,因为框架本身不能被愚弄?
所以我正在寻找一个完全验证的HttpServletRequest
实现,或者说是为什么在这种情况下没有必要。当然,我将使用实现来验证请求正文和参数。
答案 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实现集成,您希望查看特定于供应商的文档: