Проблемы с токеном запроса GData - PullRequest
0 голосов
/ 01 октября 2009

Мы успешно использовали библиотеки GData для доступа к Google Документам пользователя. Но мы столкнулись с проблемами, когда многие пользователи заходят на наш сайт и авторизуют наше веб-приложение одновременно или последовательно.

Вот что происходит:

Успешный вход первого пользователя, авторизация нашего веб-приложения через OAuth и возможность добавления рубрики (или таблицы Google).

Второй пользователь, сразу после того, как первый пользователь добавил рубрику, успешно входит в систему, затем 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)

Помощь!

1 Ответ

0 голосов
/ 05 октября 2009

Трудно сказать из этого, но я догадываюсь, что где-то есть ошибка параллелизма, и некоторый объект, используемый для OAuth, который не является потокобезопасным, используется в нескольких потоках обработки запросов.

...