【问题标题】:Custom annotations to set HTTP response headers in a JAX-RS service用于在 JAX-RS 服务中设置 HTTP 响应标头的自定义注释
【发布时间】:2010-10-10 21:15:27
【问题描述】:

我有一个 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 响应标头的各种方法相集成的 注释,以最大限度地减少样板代码。

【问题讨论】:

  • 我正在寻找更精简的东西;使用 HttpServletResponse 的注释可能会起作用。不过,我不确定 javax.ws.rs.Response 和 HttpServletResponse 之间的微妙之处。

标签: java annotations jax-rs


【解决方案1】:

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

Apache Wink 和可能的其他 JAX-RS 框架中,您可以创建自定义服务器端处理程序,该处理程序还可以读取资源方法上的注释并做任何您想做的事情(例如默认设置响应标头)。

【讨论】:

    猜你喜欢
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 2011-09-25
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多