Доступ к Web-сайтам социальных сетей по протоколу OAuth: Часть 3. Развертывание клиентского Web-приложения для Twitter в среде Google App Engine

OAuth – это открытый протокол, позволяющий пользователям предоставлять свои защищенные ресурсы различным Web-сайтам, не открывая необходимой для доступа к ним информации. В первой части этой серии статей был представлен протокол OAuth и была рассмотрена разработка настольного клиентского приложения для Twitter, использующего OAuth. Во второй части вы узнали, как разработать клиентское Web-приложение для Twitter. В этой, последней, части серии, мы развернем разработанное ранее Web-приложение в среде Google App Engine (GAE).

Сяобо Ян, разработчик корпоративных Java-приложений, Независимый разработчик

Сяобо Ян (Xiaobo Yang) - фотографияСяобо Ян (Xiaobo Yang) – разработчик корпоративных Java-приложений, работающий в Великобритании. Интересуется корпоративными информационными системами, в частности, корпоративными порталами. Сяобо получил степень доктора философии по проектированию авиационно-космической техники в университете Глазго.



06.12.2011

OAuth предоставляет сайту потребителя более корректный способ обращения к защищенным пользовательским ресурсам, хранящимся у поставщика сервисов. Благодаря OAuth информация о полномочиях никогда не предоставляется сайтам, отличным от того, на котором они первоначально хранятся. Используя настольное клиентское приложение для Twitter в первой части данной серии статей, вы можете обновлять свой статус в Twitter после получения приложением MyTtDesktopClient доступа к данным, хранящимся в Twitter. Использовать приложение снова будет еще удобнее, поскольку маркер доступа можно использовать повторно. Во второй части данной серии статей было продемонстрировано, как разработать Web-клиент для Twitter, позволяющий пользователям выполнять аутентификацию на Twitter по протоколу OAuth и обновлять свой статус. Он также отображает ленты сообщений (timeline) от друзей.

В данной статье вы узнаете, как сделать Web-приложение, работающее в реальной среде. Мы выполним перенос Twitter-клиента, разработанного во второй части, в среду Google App Engine (GAE). Просто развернуть WAR-файл недостаточно; для работы в среде GAE нужно выполнить некоторые изменения. Самым простым способом работы с GAE является использование плагинаGoogle Plugin для Eclipse, который поддерживает разработку для GAE и Google Web Toolkit (GWT).

Исходный код примера, используемого в данной статье, можно загрузить.

Google App Engine

Среда GAE, предоставляемая Google, позволяет Web-приложениям работать в инфраструктуре Google. Большим преимуществом GAE является то, что приложения можно легко масштабировать по мере роста требований к трафику и объему хранимых данных. Можно сконцентрироваться на разработке программного обеспечения, не беспокоясь об обслуживании Web-сервера и сервера базы данных. Если ваши приложения, развернутые в среде GAE, потребляют приемлемый объем трафика, эту среду можно использовать бесплатно. По мере роста количества пользователей вашего сайта можно приобрести у Google больше процессорного времени и места под хранение данных. На момент написания данной статьи в GAE поддерживался код, написанный на Python и Java™.


Регистрация Web-приложения в Google

Все GAE-приложения необходимо регистрировать в Google:

  1. Если у вас еще нет учетной записи в Google, создайте ее.
  2. Перейдите на страницу Google App Engine и зарегистрируйтесь.
  3. Нажмите кнопку Create an Application (создать приложение). Отобразится запрос страны проживания и номера мобильного телефона.

    Google отправит код верификации на ваш мобильный телефон.

  4. После верификации можно зарегистрироваться в GAE и нажать кнопку Create an Application для создания Web-приложения.

Например, я предоставил следующую информацию при регистрации своего приложения:

  • Application Identifier (идентификатор приложения): dr-yang-tt.appspot.com.

    Выберите свой собственный уникальный идентификатор.

  • Application Title (название приложения): DR YANG's Twitter Client.
  • Authentication Options (параметры аутентификации): перейдите по ссылке Edit, выберите Restricted to the following Google Apps domain (ограничено для следующего домена Google Apps) и оставьте поле пустым.

    По умолчанию ваш сайт открыт для всех пользователей, имеющих учетную запись Google, но указанная выше настройка разрешает любому человеку (как имеющему учетную запись Google, так и не имеющему ее) обращаться к вашему сайту.


Регистрация Web-приложения в Twitter

Если вы работали с первыми двумя частями данной серии статей, можете либо зарегистрировать в Twitter новое приложение, либо изменить ранее созданное и зарегистрированное. Пример приложения был зарегистрирован как новое приложение по адресу http://twitter.com/oauth_clients следующим образом:

  • Application Name (имя приложения): Dr Yang's Tt Web Client.
  • Description (описание): Web-клиент для Twitter, работающий в среде Google app engine.
  • Application Web site (Web-сайт приложения): http://dr-yang-tt.appspot.com/twitterwebclient.
  • Application Type (тип приложения): Browser.
  • Callback URL (URL обратного вызова): http://dr-yang-tt.appspot.com/twitterwebclient.

    Укажите корректный URL обратного вызова; не нужно использовать функцию настройки URL обратного вызова, описанную во второй части серии статей (EN).

  • Default Access type (тип доступа по умолчанию): Read & Write.

    Предоставьте пользователям права для чтения и записи.

  • Use Twitter for login (использовать Twitter для регистрации): No.

После успешной регистрации приложения вы получите ключ потребителя (consumer key), секретную информацию (consumer secret) и три URL (URL маркера запроса (request token), URL маркера доступа (access token) и URL авторизации). Ключ потребителя и секретная информация указываются в файле WEB-INF/web.xml.


Разработка и тестирование Twitter-клиента в GAE

Как уже упоминалось, в примере используется плагин Google Plugin for Eclipse. На момент написания данной статьи поддерживаются три версии Eclipse: 3.5 (Galileo), 3.4 (Ganymede) и 3.3 (Europa). Пример разрабатывался на машине с Eclipse 3.5, поэтому устанавливался плагин Google Plugin for Eclipse 3.5. Предполагается, что вы установили плагин полностью вместе с поддержкой разработки GAE и GWT. После установки прочтите вводное руководство и узнайте, как разработать Web-приложение "Hello World" и развернуть его в среде GAE. (Пошаговые инструкции выходят за рамки данной статьи.)

После создания приложения Web Application Project в Eclipse у вас появится несколько шаблонов, созданных Google Plugin. Их можно использовать в качестве базового проекта для добавления собственного кода. На рисунке 1 показаны файлы проекта TwitterWebClient1. Описание файлов приводится после рисунка 1.

При создании проекта поддержка GWT не выбиралась. Возможно, вы захотите разрешить GWT, если знакомы с этой технологией. GWT позволяет разрабатывать Ajax-приложения, используя стиль программирования Java Swing.

Рисунок 1. GAE-проект TwitterWebClient1 в Eclipse
Рисунок 1. GAE-проект TwitterWebClient1 в Eclipse
src/logging.properties
Конфигурационный файл регистрации событий Java. Возможно, его будет легче использовать, чем Log4J в GAE.
src/dryang/twitterwebclient/IdAndAccessToken.java
Класс данных логического объекта (entity data) для Java Persistence API (JPA).
src/dryang/twitterwebclient/JpaUtil.java
Вспомогательный класс JPA.
src/dryang/twitterwebclient/TwitterStatus.java
Класс, представляющий Twitter-ленту новостей.
src/dryang/twitterwebclient/TwitterWebClientServlet.java
Базовый контроллер приложения, отвечает за аутентификацию OAuth и пользовательские взаимодействия.
src/META-INF/jdoconfig.xml
Конфигурационный файл Java Data Object (JDO). В данном примере не используется.
war/error.jsp
JSP-страница для обработки исключительных ситуаций.
war/Gnome-Edit-Delete-32.png
Пиктограмма удаления.
war/index.html
Страница приветствия, автоматически направляющая браузер пользователя в наш Twitter-клиент.
war/login_twitter.html
Страница регистрации.
war/twitter_button_5_hi.gif
Изображение кнопки Sign-in.
war/update_twitter_status.jsp
JSP-страница для отображения пользовательской информации на Twitter.
war/WEB-INF/appengine-web.xml
Конфигурационный файл Web GAE.
war/WEB-INF/web.xml
Стандартный конфигурационный файл Web.

Перед компилированием и развертыванием исходного кода в GAE:

  1. Не забудьте указать ваш собственный ключ потребителя и секретную информацию в файле web.xml.
  2. Необходимо также поместить twitter4j-2.0.9.jar в каталог war/WEB-INF/lib.

    Twitter4J – это Java-библиотека с открытыми исходными кодами для TwitterAPI (см. раздел Ресурсы).

  3. Добавьте JAR-файл вручную в путь компоновки (build path) вашего проекта.

Базовая часть кода, сервлет TwitterWebClient, очень похож на MyTwitterServlet, представленный во второй части данной серии статей. Однако имеется несколько отличий, а именно:

  • Была принята система регистрации событий Java, поскольку нелегко заставить работать Log4J с GAE.

    GAE не поддерживает HTTP-сессии по умолчанию. Их необходимо разрешить путем добавления в файл war/WEB-INF/appengine-web.xml строки:

    <sessions-enabled>true</sessions-enabled>

  • Объект Twitter больше не сохраняется в HTTP-сессии из-за проблем сериализации. Возможно, вам известно, что GAE является динамической кластерной средой. Все, что сохраняется в HTTP-сессии должно реализовывать интерфейс java.io.Serializable, как делает класс TwitterStatus в примере. Для решения этой проблемы пример сохраняет маркер доступа в сессии, из которого объект Twitter может создаваться и аутентифицироваться.
  • Пользовательский маркер доступа больше не сохраняется в обычном текстовом файле (plain text), а сохраняется в хранилище данных GAE, которое отличается от традиционных баз данных. К счастью, оно поддерживает и JDO, и JPA. В примере используется JPA. Инструкции приведены в документации Google Использование JPA с App Engine.

    В общем случае выполняйте конфигурирование JPA в persistence.xml. Создайте классы данных и вспомогательные классы для получения экземпляра EntityManager. В данном Web-приложении классом данных является dryang.twitterwebclient.IdAndAccessToken, который имеет три поля: id, token и tokenSecret (см. листинг 1). Возможно, вы заметили префикс "$" в Twitter ID пользователя в методах storeAccessToken(...) и loadAccessToken(...) сервлета TwitterWebClient. Он используется потому, что идентификатор указывается как java.lang.String, в то время как Twitter ID является целым числом (integer). Хранилище данных GAE не принимает такой идентификатор как строку.

Листинг 1. Класс данных JPA dryang.twitterwebclient.IdAndAccessToken
@Entity
public class IdAndAccessToken {
	@Id
	private String id;
	private String token;
	private String tokenSecret;

	public IdAndAccessToken() {
	}

	public IdAndAccessToken(String id, String token, String tokenSecret) {
		this.id = id;
		this.token = token;
		this.tokenSecret = tokenSecret;
	}

	// Getters and setters
	......
}

После завершения разработки:

  1. Щелкните правой кнопкой мыши на проекте в Eclipse и выберите Google --> App Engine Settings....

    Должно отобразиться всплывающее окно, похожее на изображенное на рисунке 2.

  2. Укажите корректный идентификатор приложения (в данном примере это dr-yang-tt).
  3. Снова щелкните правой кнопкой мыши на проекте в Eclipse и выберите Google --> Deploy to App Engine.

Спустя некоторое время ваше приложение должно успешно развернуться в GAE.

Рисунок 2. Настройки GAE в Eclipse
Рисунок 2. Настройки GAE в Eclipse

GAE предоставляет интерфейс управления. Зарегистрируйтесь в этом интерфейсе, используя данные своей учетной записи Google; должен отобразиться список ваших приложений. На рисунке 3 показан пример для приложения dr-yang-tt. Вы обнаружите, что ссылка Logs является очень полезным средством для отладки приложений.

Помните об ограничении, накладываемом Twitter на API-вызовы. После ввода приложения в эксплуатацию вам может понадобиться более частое обращение к Twitter. И по мере привлечения большего количества пользователей на сайт может понадобиться приобрести у Google больше процессорного времени и места для хранения данных.

Рисунок 3. Интерфейс управления GAE для dr-yang-tt
Рисунок 3. Интерфейс управления GAE для dr-yang-tt

На рисунке 4 показано приложение, выполняющееся в GAE.

Рисунок 4. Twitter-клиент, использующий OAuth, в среде GAE
Рисунок 4. Twitter-клиент, использующий OAuth, в среде GAE

Резюме

В данной серии статей вы узнали о протоколе OAuth и разработали настольное клиентское приложение для Twitter. Затем вы разработали Web-клиент для Twitter, продемонстрировавший прозрачную работу OAuth с Web-браузерами. В этой последней статье серии рассматривалось развертывание Web-клиента для Twitter в среде Google App Engine. Теперь вы можете использовать OAuth для доступа к сайтам социальных сетей. Благодаря OAuth информация о полномочиях пользователя не раскрывается при предоставлении защищенных ресурсов другим Web-сайтам.


Загрузка

ОписаниеИмяРазмер
Пример кода для данной статьиoauth-part3-source-code.zip35 KБ

Ресурсы

Научиться

Получить продукты и технологии

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Web-архитектура, SOA и web-сервисы, Технология Java
ArticleID=778913
ArticleTitle=Доступ к Web-сайтам социальных сетей по протоколу OAuth: Часть 3. Развертывание клиентского Web-приложения для Twitter в среде Google App Engine
publish-date=12062011