首页 > 解决方案 > 如果使用 Objectify 6.0 和同时

问题描述

在一个 App Engine 应用程序上,部署在标准环境中并激活了 java 8,如果我同时使用 Objectify 6.0 和<url-stream-handler>urlfetch</url-stream-handler>appengine-web.xml 文件中的标签,我会得到以下异常。

com.google.cloud.datastore.DatastoreException: Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.

知道如何绕过它吗?

如果我删除 urlfetch 标签(并激活计费)或者如果我将 Objectify 降级到 v5,事情就会恢复正常。

标签: google-app-enginegoogle-cloud-datastoreobjectify

解决方案


我怀疑您遇到的是 Java 7 和 Java 8 标准环境之间的差异之一。正如Issuing HTTP(S) Requests所指出的(例如HTTP/2) ,避免urlfetch路径有很多好处。尤其是元数据服务器,它在 App Engine 上运行时对 Google Cloud SDK 进行自动身份验证,使用无法访问(请参阅该页面)。urlfetch

我认为您最好的选择可能是启用计费,如果您对此感到满意的话。从文档页面:

尽管要求为您的应用程序启用计费,但您的应用程序不会比在 Java 7 上运行的同一应用程序产生更多的成本。

如果您仍然想urlfetch尝试一下,我认为您遇到的错误可以通过手动提供凭据(例如将它们捆绑在您的应用程序中)来修复,但这不会那么安全或性能。


推荐阅读