0

我们已成功使用 GData 库访问用户的 Google 文档。但是,当许多用户同时或相继登录我们的网站并授权我们的网络应用程序时,我们遇到了问题。

这是发生的事情:

第一个用户成功登录,通过 OAuth 授权我们的网络应用程序,并能够添加规则(或谷歌电子表格)。

第二个用户,在第一个用户添加规则后,立即成功登录,然后 webapp 授权失败(未给出令牌。我试图记录它。)

第三个用户登录失败。

第四个用户能够登录,通过 OAuth 授权,并成功创建评分表。

第五个用户能够登录,但与第二个用户一样,在授权时获得了无效令牌(未给出令牌。)

而这样的例子不胜枚举。结果是不可预测的。

下面是我们在失败场景发生时获得的堆栈跟踪的摘录:

Nested in org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException:
java.lang.NullPointerException
at com.google.gdata.client.authn.oauth.OAuthUtil.normalizeParameters(OAuthUtil.java:158)
at com.google.gdata.client.authn.oauth.OAuthUtil.getSignatureBaseString(OAuthUtil.java:81)
at com.google.gdata.client.authn.oauth.OAuthHelper.addCommonRequestParameters(OAuthHelper.java:649)
at com.google.gdata.client.authn.oauth.OAuthHelper.getOAuthUrl(OAuthHelper.java:592)
at com.google.gdata.client.authn.oauth.OAuthHelper.getUnauthorizedRequestToken(OAuthHelper.java:276)
at com.projectrix.controller.OAuthController.authorize(OAuthController.java:59)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Method.java:40)

帮助!

4

1 回答 1

0

很难从中分辨出来,但我的直觉是某处存在并发错误,并且用于 OAuth 的某些对象不是线程安全的,正在多个请求处理线程中使用。

于 2009-10-04T20:42:15.733 回答