[英]Set response header in Google App Engine Endpoints (Java)
我正在使用Java中的GAE端點實現RESTful服務。 我正在嘗試實現基於令牌的身份驗證方法,我希望添加一個包含令牌字符串的HTTP響應頭。 但是,我無法找到有關如何更改@ApiMethod內部響應標頭的文檔。
有人可以對此有所了解嗎? 任何幫助非常感謝。
從事物的外觀來看,這是不可能的。 在這個問題上還有另一個Stack Overflow Q&A以同樣的方式回答。 當然,您可以在App Engine公共問題跟蹤器上發出功能請求。
注意:嘗試使用javax.servlet.Filter
攔截ServletResponse
,將其.setHeader()
轉換為HttpServletResponse
並在其上調用.setHeader()
沒有成功,所以看起來有其他層攔截響應並且沒有任何一個包裹根據Endpoints,添加的標題並非“意味着”存在。 我沒有試驗子類化SystemServiceServlet
,正如鏈接的Q&A建議的那樣,盡管這似乎也充滿了困難,並且沒有記錄。
我檢查過沒有辦法改變響應頭。 更多關於@Nick的說法是有更多層 - 在servlet容器上有包裝響應的代碼。
上面的一些層 - 證據是為端點打包錯誤消息。 SystemServletService正在進入體內:
{
"error_message": "Some message"
}
你在實踐中得到的答案包含:
{
"error": {
"message": "Some messaged",
"code": 401,
"errors": [
{
"domain": "global",
"reason": "required",
"message": "Some message"
}
]
}
}
對於端點(SystemServiceServlet),對於我的自定義servlet,它不是。 這證明上面有一些層。 ;)
我不知道它是否適用於您的情況,但您可以使用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項目上成功設置了標題,盡管我沒有嘗試使用標記字符串
我能夠使用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();
}
```
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.