2015-10-22 178 views
3

我正在Java中使用GAE端點實現RESTful服務。我試圖實現基於令牌的身份驗證方法,我希望添加一個包含令牌字符串的HTTP響應頭。但是,我無法找到有關如何更改@ApiMethod中的響應標頭的文檔。在Google App Engine端點(Java)中設置響應標頭

有人可以對此有所瞭解嗎?非常感謝任何幫助。

回答

1

從外觀看,這是不可能的。在這個問題上有another Stack Overflow Q&A,回答方式相同。當然,您可以在App Engine Public Issue Tracker上發送功能請求。

注:嘗試使用javax.servlet.Filter攔截ServletResponse,將它轉換爲一個HttpServletResponse並調用.setHeader()上它沒有產生成功,所以會出現有被截取的響應,並且結束了一個沒有任何標題添加其它層,其根據Endpoints的說法,它們並不是「有意」存在的。我並沒有試驗SystemServiceServlet的子類別,因爲鏈接的Q & A建議,儘管這似乎也有困難,並且沒有文件。

1

我檢查了沒有辦法改變響應頭。 @Nick有更多的權利,有更多的層次 - 在servlet容器上有代碼包裝響應。

上面的一些圖層 - 證據表明錯誤消息是爲終端打包的。 SystemServletService被投入體這樣的:

{ 
    "error_message": "Some message" 
} 

卜在實際響應你得到包含:

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

對於端點(SystemServiceServlet)只,爲我定製的Servlet它不是。這是上面有一層的證據。 ;)

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成功設置頭項目,雖然我還沒有用令牌字符串嘗試過它

0

我能夠用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(); 
} 

```

相關問題