0

GData ライブラリを使用してユーザーの Google ドキュメントにアクセスすることに成功しました。しかし、多くのユーザーがサイトにログインし、同時にまたは連続して Web アプリを承認すると、問題が発生しました。

何が起こるかは次のとおりです。

最初のユーザーはログインに成功し、OAuth を介して Web アプリを承認し、ルーブリック (または Google スプレッドシート) を追加できます。

2 番目のユーザーは、最初のユーザーがルーブリックを追加した直後に、正常にログインし、webapp は認証に失敗します (トークンが指定されていません。ログに記録しようとしました。)

3 番目のユーザーがログインに失敗します。

4 番目のユーザーはログインし、OAuth を介して承認し、ルーブリックを正常に作成できました。

5 番目のユーザーはログインできましたが、2 番目のユーザーと同様に、承認時に無効なトークンを取得しました (トークンが与えられていません)。

そして、リストは続きます。結果は予測できませんでした。

以下は、失敗シナリオが発生したときに取得するスタック トレースの抜粋です。

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 に答える