我正在使用Java中的GAE端点实现RESTful服务。我试图实现基于令牌的身份验证方法,我希望添加一个包含令牌字符串的HTTP响应头。但是,我无法找到有关如何更改@ApiMethod内部响应标头的文档。
任何人都可以对此有所了解吗?非常感谢任何帮助。
答案 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>
我已经在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();
}
```