在Google App Engine端点(Java)中设置响应标头

时间:2015-10-22 16:56:39

标签: java google-app-engine google-cloud-endpoints

我正在使用Java中的GAE端点实现RESTful服务。我试图实现基于令牌的身份验证方法,我希望添加一个包含令牌字符串的HTTP响应头。但是,我无法找到有关如何更改@ApiMethod内部响应标头的文档。

任何人都可以对此有所了解吗?非常感谢任何帮助。

4 个答案:

答案 0 :(得分:1)

从事物的外观来看,这是不可能的。这个问题有another Stack Overflow Q&A以同样的方式回答。当然,您可以在App Engine Public Issue Tracker处制作功能请求。

注意:尝试使用javax.servlet.Filter截取ServletResponse,将其转换为HttpServletResponse并在其上调用.setHeader()没有成功,因此看起来还有其他根据Endpoints的说法,这些层正在拦截响应并包含一个没有添加任何标题的图层,这些图标并非“意味着”存在。我没有尝试子类化SystemServiceServlet,正如链接的Q& A所暗示的那样,尽管这似乎也充满了困难,并且没有记录。

答案 1 :(得分:1)

我已经检查过无法更改响应标头。 更多关于@Nick的说法是有更多层 - 在servlet容器上有包装响应的代码。

上面的一些层 - 证据是为端点打包了错误消息。 SystemServletService正在加入这个:

{
  "error_message": "Some message"
}

在实践中你得到的答案包含:

{
    "error": {
        "message": "Some messaged",
        "code": 401,
        "errors": [
            {
                "domain": "global",
                "reason": "required",
                "message": "Some message"
            }
        ]
    }
}

仅对于端点(SystemServiceServlet),对于我的自定义servlet,它不是。这证明上面有一些层。 ;)

答案 2 :(得分:0)

我不知道它是否适用于您的情况,但您可以使用UrlRewriteFilter设置响应标头:

<urlrewrite>
    <rule>
        <from>.*</from>
        <set type="response-header" name="X-Frame-Options">DENY</set>
        <set type="response-header" name="Cache-Control">no-cache, no-store, max-age=0, must-revalidate</set>
    </rule>
</urlrewrite>

http://tuckey.org/urlrewrite/

我已经在App Engine项目上成功设置了标题,虽然我还没有尝试使用标记字符串

答案 3 :(得分:0)

我能够使用cache-control标头执行此操作。例如,如果您想出于某种原因从servlet提供图像,那么您可以使用Jersey设置cache-control响应标头:

@GET
@Path("/{url}/{maxHeight}")
@Produces("image/jpeg")
public Response view(
        @Context HttpServletRequest req,
        @PathParam("url") String url,
        @PathParam("maxHeight") int maxHeight
) throws IOException, URISyntaxException {
    ... [code to generate imageData]
    return Response
            .ok(imageData)
            .cacheControl(CacheControl.valueOf("max-age=2592000"))
            .build();
}

```