我正在Java中使用GAE端點實現RESTful服務。我試圖實現基於令牌的身份驗證方法,我希望添加一個包含令牌字符串的HTTP響應頭。但是,我無法找到有關如何更改@ApiMethod中的響應標頭的文檔。在Google App Engine端點(Java)中設置響應標頭
有人可以對此有所瞭解嗎?非常感謝任何幫助。
我正在Java中使用GAE端點實現RESTful服務。我試圖實現基於令牌的身份驗證方法,我希望添加一個包含令牌字符串的HTTP響應頭。但是,我無法找到有關如何更改@ApiMethod中的響應標頭的文檔。在Google App Engine端點(Java)中設置響應標頭
有人可以對此有所瞭解嗎?非常感謝任何幫助。
從外觀看,這是不可能的。在這個問題上有another Stack Overflow Q&A,回答方式相同。當然,您可以在App Engine Public Issue Tracker上發送功能請求。
注:嘗試使用javax.servlet.Filter
攔截ServletResponse
,將它轉換爲一個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服務的圖像,那麼你可以與澤西設置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();
}
```