OAuth — это протокол безопасности, который позволяет пользователям авторизовать клиентские приложения для доступа к своим веб-ресурсам. OAuth быстро стал отраслевым стандартом для делегирования доступа через Интернет. Есть много известных (REST) сервис-провайдеров, таких как Yahoo , Delicious , Twitter и SmugMug , которые уже применяют протокол OAuth.
IDE NetBeans предоставляет механизм, в котором защищенный OAuth ресурс REST может быть зарегистрирован в IDE, и для такого ресурса может быть создан клиент приложения. В среде IDE по умолчанию регистрируются ресурсы REST OAuth для служб Twiter и Delicious.
Смотрите скриншот для деталей:
В этой статье я продемонстрирую, как клиент Twitter, использующий протокол OAuth, может быть создан в веб-приложении:
Создайте клиентский класс Twitter
Выполните следующие шаги, чтобы создать класс клиента Twitter в IDE:
- Выберите «Файл»> «Новый проект». Под категориями выберите Java Web. В разделе «Проекты» выберите « Веб-приложение» и нажмите «Далее».
- В поле Имя проекта введите TwitterWebApp . Выберите место для проекта. Нажмите «Далее.
- Выберите GlassFish и Java EE 6 или EE 5. Примите настройки по умолчанию для других параметров и нажмите «Готово».
- В окне «Проекты» щелкните правой кнопкой мыши узел TwitterWebApp и выберите «Создать»> «Другие». Откроется мастер создания нового файла, выберите категорию веб-служб. Выберите тип файла RESTful Java Client , нажмите Далее …
- В поле Имя класса введите TwitterClient . В поле «Пакет» введите твиттер.
- В разделе «Выбор ресурса REST» выберите переключатель « Зарегистрированная среда IDE » и нажмите «Обзор»:
-
Откроется диалоговое окно «Доступные ресурсы REST». Найдите Twitter> OAuth Twitter> статусы> [friends_timeline. {Format}] и нажмите OK.
-
Диалоговое окно New RESTful Java Client завершено. Обратите внимание, что поле Authentication автоматически заполняется OAuth, который является опцией для протокола OAuth. Нажмите Готово.
-
Откроется диалоговое окно с вопросом, хотите ли вы сгенерировать артефакты Java из ссылок схемы XML в WADL. Нажмите Да.
Класс TwitterClient генерируется и открывается в редакторе. Класс TwitterClient довольно сложный и содержит следующие поля, методы или внутренние классы:
- CONSUMER_KEY: строка потребительского ключа
- CONSUMER_SECRET: строка потребительского сектора
- i nitOAuth () : метод для инициализации OAuh
- getFriendsTimeline () : метод, соответствующий методу HTTP: getFriendsTimeline (из ресурса REST)
- makeOAuthRequestUnique () : полезно для нескольких вызовов API в одном сеансе
- OAuthLoginServlet : используется для входа в приложение Twitter ( принудительная авторизация)
- OAuthCallbackServlet : используется механизмом обратного вызова для перенаправления потока приложения после авторизации
Зарегистрируйте новое приложение Twitter
Если вы хотите, чтобы веб-приложение получало доступ к данным Twitter, вам необходимо зарегистрировать приложение в Twitter:
- Перейдите на страницу Twitter> Приложения и нажмите ссылку Зарегистрировать новое приложение », чтобы зарегистрировать новое приложение Twitter.
- Введите текстовое поле My First Web Application for Application Name .
- Введите http://netbeans.org/OAuthCallback.php?callback_url=http://localhost:8080/TwitterWebApp/OAuthCallback для поля URL обратного вызова .
- Введите этот URL: http://netbeans.org/OAuthCallback.php?callback_url=http://localhost:8080/TwitterWebApp для веб-сайта приложения .
- Убедитесь в том , что браузер радио — кнопка выбрана для типа Application варианта
- Оставьте другие параметры по умолчанию и нажмите Сохранить
Примечание . 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));
}
Запустить проект
- Щелкните правой кнопкой мыши узел проекта в окне «Проекты». Выберите Deploy из контекстного меню. Среда IDE создает ваш проект, запускает сервер приложений и развертывает проект на сервере приложений.
- Снова щелкните правой кнопкой мыши узел проекта и выберите « Выполнить» , что должно привести к следующему: