0

我正在使用 Jersey 构建一个 RESTful 服务来替换现有的遗留服务。

旧式请求格式要求身份验证凭据在 POST 请求的正文中传递。这使得在将请求传递给 Jersey 之前验证请求(使用 Spring 安全性)变得很尴尬,因为必须读取 POST 主体以提取身份验证凭据,然后在移交给 Jersey 之前重新打包。

这意味着,对于每个 POST 请求,必须读取请求流,重新序列化,然后由 Jersey 再次读取MessageBodyReader。我不喜欢这个,因为它效率低下。理想情况下,我想做的是将传入的消息转换为规范的消息格式,对其进行身份验证,然后将该规范格式传递给 Jersey。JAX-RS 似乎不支持这种事情。

有没有人建议避免重复阅读请求正文的方法?任何允许我使用自定义、规范消息格式而不是 in 的 RESTful 框架InputStream

谢谢!

4

1 回答 1

0

这里有几个选项。

最简单的方法是阅读消息正文并使用它在过滤器中检查您的凭据。但是,如果您这样做,您将需要设置一个InputStream数据,以便您可以将其传递给可能存在的任何下游过滤器(以及最终的消息正文阅读器)。听起来这就是你一直在走的路,我建议你坚持下去。您不需要重新序列化,因为您拥有原始输入字符串并且可以将其传递给它InputStream而不对其进行转换,如果输入格式正确,您也可以避免完全序列化。

或者,您可以在检查凭据的同时将所有内容转换为某种描述的规范对象,并将其存储为可以由您的资源访问的请求变量。问题在于你正在与泽西的做事方式作斗争,所以我不推荐它。你的资源方法在外人看来会有点奇怪,你的过滤器需要知道你的模型的所有信息,所以设计有点颠倒。

于 2013-02-24T09:16:51.013 回答