Статьи

Поддержка OAuth в IDE NetBeans 6.9

OAuth — это протокол безопасности, который позволяет пользователям авторизовать клиентские приложения для доступа к своим веб-ресурсам. OAuth быстро стал отраслевым стандартом для делегирования доступа через Интернет. Есть много известных (REST) ​​сервис-провайдеров, таких как Yahoo , Delicious , Twitter и SmugMug , которые уже применяют протокол OAuth.

IDE NetBeans предоставляет механизм, в котором защищенный OAuth ресурс REST может быть зарегистрирован в IDE, и для такого ресурса может быть создан клиент приложения. В среде IDE по умолчанию регистрируются ресурсы REST OAuth для служб Twiter и Delicious.

Смотрите скриншот для деталей:

 

В этой статье я продемонстрирую, как клиент Twitter, использующий протокол OAuth, может быть создан в веб-приложении:

Создайте клиентский класс Twitter

 Выполните следующие шаги, чтобы создать класс клиента Twitter в IDE:

  1. Выберите «Файл»> «Новый проект». Под категориями выберите Java Web. В разделе «Проекты» выберите « Веб-приложение» и нажмите «Далее».
  2. В поле Имя проекта введите TwitterWebApp . Выберите место для проекта. Нажмите «Далее.
  3. Выберите GlassFish и Java EE 6 или EE 5. Примите настройки по умолчанию для других параметров и нажмите «Готово».
  4. В окне «Проекты» щелкните правой кнопкой мыши узел TwitterWebApp и выберите «Создать»> «Другие». Откроется мастер создания нового файла, выберите категорию веб-служб. Выберите тип файла RESTful Java Client , нажмите Далее …
  5. В поле Имя класса введите TwitterClient . В поле «Пакет» введите твиттер.
  6. В разделе «Выбор ресурса REST» выберите переключатель « Зарегистрированная среда IDE » и нажмите «Обзор»:

  7. Откроется диалоговое окно «Доступные ресурсы REST». Найдите Twitter> OAuth Twitter> статусы> [friends_timeline. {Format}] и нажмите OK.

  8. Диалоговое окно New RESTful Java Client завершено. Обратите внимание, что поле Authentication автоматически заполняется OAuth, который является опцией для протокола OAuth. Нажмите Готово.

  9. Откроется диалоговое окно с вопросом, хотите ли вы сгенерировать артефакты Java из ссылок схемы XML в WADL. Нажмите Да.

Класс TwitterClient генерируется и открывается в редакторе. Класс TwitterClient довольно сложный и содержит следующие поля, методы или внутренние классы:

  • CONSUMER_KEY: строка потребительского ключа
  • CONSUMER_SECRET: строка потребительского сектора
  • i nitOAuth () : метод для инициализации OAuh
  • getFriendsTimeline () : метод, соответствующий методу HTTP: getFriendsTimeline (из ресурса REST) 
  • makeOAuthRequestUnique () : полезно для нескольких вызовов API в одном сеансе
  • OAuthLoginServlet : используется для входа в приложение Twitter ( принудительная авторизация)
  • OAuthCallbackServlet : используется механизмом обратного вызова для перенаправления потока приложения после авторизации

Зарегистрируйте новое приложение Twitter

Если вы хотите, чтобы веб-приложение получало доступ к данным Twitter, вам необходимо зарегистрировать приложение в Twitter:

  1. Перейдите на страницу Twitter> Приложения и нажмите ссылку Зарегистрировать новое приложение », чтобы зарегистрировать новое приложение Twitter.
  2. Введите текстовое поле My First Web Application for Application Name .
  3. Введите http://netbeans.org/OAuthCallback.php?callback_url=http://localhost:8080/TwitterWebApp/OAuthCallback для поля URL обратного вызова
  4. Введите этот URL: http://netbeans.org/OAuthCallback.php?callback_url=http://localhost:8080/TwitterWebApp для веб-сайта приложения .
  5. Убедитесь в том , что браузер радио — кнопка выбрана для типа Application варианта
  6. Оставьте другие параметры по умолчанию и нажмите Сохранить

Примечание . Http://netbeans.org/OAuthCallback.php — это обходной путь ограничения Twitter, когда страница обратного вызова не может быть расположена на локальном хосте . ( http: // localhost: 8080 / TwitterWebApp / OAuthCallback). Php просто перенаправляет вывод вместе со всеми параметрами запроса на URL, указанный параметром callback_url . В реальном мире вы можете настроить URL обратного вызова на реальную страницу обратного вызова (страницу, на которой поток приложения должен быть перенаправлен после авторизации).

Скопируйте Ключ потребителя и Секрет потребителя в свое приложение

После успешной регистрации приложения Twitter вам необходимо скопировать ключи Consumer Key и Consumer Secret со страницы сведений о приложении в свой класс TwitterClient . Отредактируйте класс TwitterClient и замените поля CONSUMER_KEY и CONSUMER_SECRET значениями, назначенными для вашего приложения Twitter.

Пример:

    /**
* Please, specify the consumer_key string obtained from service API pages
*/
private static final String CONSUMER_KEY = "ABCDKPPOEOFMSrtB1r1kxQ";
/**
* Please, specify the consumer_secret string obtained from service API pages
*/
private static final String CONSUMER_SECRET = "ABCDi9Rf1JRwxeGnjPt6mo4UMoQESUUYjyukx58";

Напишите код клиента

Это код клиента, записанный в файле index.jsp :

<%@page contentType="text/html" pageEncoding="UTF-8" 
import="twitter.TwitterClient,
twitter.twitteroauth.twitterresponse.*,
com.sun.jersey.api.client.UniformInterfaceException" %>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h2>Friends Statuses</h2>
<%
if (session.getAttribute("oauth_token") == null) {
response.sendRedirect("OAuthLogin");
} else {
TwitterClient twitter = new TwitterClient("xml");
twitter.initOAuth(request, response);
try {
Statuses resp =
twitter.getFriendsTimeline(
Statuses.class, null, null, null, 100);
int i=0;
for (StatusType status : resp.getStatus()) {
out.println("<p>author: <b>"+status.getUser().getName()+
"</b>("+status.getCreatedAt()+")</p>"+
"<p><tt>"+status.getText()+"</tt></p>");
}
} catch (UniformInterfaceException ex) {
System.out.println(
"Error = "+ex.getResponse().getEntity(String.class));
}
twitter.close();
}
%>
</body>
</html>

Примечание: клиентский код берет
строку
oauth_token из сеанса HTTP и проверяет ее на ноль.

Если ноль, ответ перенаправляется сервлету OAuthLogin, что вызывает авторизацию. Если нет, то строка oauth_token используется для отправки авторизованного запроса в Twitter API для получения последних 100 статусов (ваших друзей) из Twitter.

Вы также можете изменить
TwitterClient $ OAuthCallbackServlet и добавить ссылку на корень приложения (index.jsp), когда приложение успешно авторизовано:


if (uiEx == null) {
out.println("Now, you have successfully authorized this application to access your data.<br><br>");
out.println("Usage: <p><pre>");
out.println(" TwitterClient client = new TwitterClient(...);");
out.println(" client.initOAuth(httpServletRequest, httpServletResponse);");
out.println(" // call any method");
out.println(" client.close();");
out.println("</pre></p>");
out.println("<a href="/TwitterWebApp/">Go Home</a>");
} else {
out.println("Problem to get access token: " + uiEx.getResponse() + ": " + uiEx.getResponse().getEntity(String.class));
}

Запустить проект

Для запуска проекта:

  1. Щелкните правой кнопкой мыши узел проекта в окне «Проекты». Выберите Deploy из контекстного меню. Среда IDE создает ваш проект, запускает сервер приложений и развертывает проект на сервере приложений.
  2. Снова щелкните правой кнопкой мыши узел проекта и выберите « Выполнить» , что должно привести к следующему: