我有一个JAX-RS Web服务,我想通过新的CORS HTTP标头禁用同源策略。 (我完全了解安全隐患。)

我想要一个自定义注释,该注释可以让我设置HTTP响应标头。例如,

@ResponseHeaders({"Access-Control-Allow-Origin: *",
                  "Access-Control-Allow-Methods: GET"})
// Or, alternatively:
@AllowOrigins({"*"})
public String resourceMethod() { ... }


这种方法可以最大程度地减少样板代码,但是我不确定是否存在细微的技术限制。 JAX-RS提供了许多注释来处理HTTP请求,而不是响应,而@Produces似乎是唯一的例外。

如果可能的话,我也更喜欢避免过多的web.xml配置。无需显式使用ResponseBuilder(如果注释使用一个,就可以了),是否有一种干净的方法来设置自定义HTTP响应标头?

为了澄清起见,我正在寻找与设置HTTP响应标头的各种方式集成在一起的注释,以最大程度地减少样板代码。

最佳答案

也许唯一由规范驱动的方法是使用自定义MessageBodyWriter。在writeTo()方法中,将传递一个MultivaluedMap,您可以在其中设置响应头。您还将在调用的资源方法上传递注释(因此您可以获取所需的任何自定义注释)。因此,请阅读批注,通过MultivaluedMap设置标题,然后使用传入的OutputStream编写消息正文。

Apache Wink以及可能的其他JAX-RS框架中,您可以创建自定义服务器端处理程序,这些处理程序还可以读取resource方法上的注释并执行所需的任何操作(例如,默认情况下设置响应头)。

10-07 15:59
查看更多