Appengine Flexible Environment是否支持AbstractAppEngineAuthorizationCodeServlet?

时间:2018-03-27 19:57:04

标签: jsp google-app-engine authentication app-engine-flexible

我想知道AppEngine灵活环境是否支持来自com.google.api-client的AbstractAppEngineAuthorizationCodeCallbackServlet。

我正在从不推荐的环境(vm:true)迁移到最新版本的Flexible Environment(env:flex)。

当访问从AbstractAppEngineAuthorizationCodeServlet扩展的我的一个servlet时,流程完美地工作,并且重定向完成到从AbstractAppEngineAuthorizationCodeCallbackServlet扩展的其他servlet。现在,当它试图运行时:

TokenResponse response = flow.newTokenRequest(code).setRedirectUri(redirectUri).execute();

(来自AbstractAuthorizationCodeCallbackServlet类的doGet内部的行)

它回复了一次:

com.google.apphosting.api.ApiProxy$CallNotFoundException: Can't make API call urlfetch.Fetch in a thread that is neither the original request thread nor a thread created by ThreadManager

更新

我可以在Cloud Console上查看我的实例确实在Flexible上运行。

1 个答案:

答案 0 :(得分:1)

我刚刚发现了lib使用的错误

在创建GoogleAuthorizationCodeFlow对象时,我传递了一个GoogleClientSecrets:

Builder(HttpTransport transport, JsonFactory jsonFactory, GoogleClientSecrets clientSecrets, Collection<String> scopes)

出于某种原因,将id和secret作为字符串传递(使用Builder的其他构造函数),它可以工作。

GoogleAuthorizationCodeFlow.Builder(HttpTransport, JsonFactory, String, String, Collection<String> scopes)

不确定原因。

------------------------------------- EDIT --------- --------------------------

我刚看到这里除了使用GoogleClientSecrets对象之外我做了另一个更改。

private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
private static final UrlFetchTransport HTTP_TRANSPORT = new UrlFetchTransport();

使用UrlFetchTransport而不是NetHttpTransport是显示堆栈跟踪的真正原因。