2015-10-22 266 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(); 
} 

```

相关问题