OAuth permite que um site de consumidor acesse de um modo melhor os recursos protegidos de um usuário mantidos em um provedor de serviços. Com OAuth, as credenciais nunca são expostas a sites a não ser o em que os dados do usuário são originalmente mantidos. Com o cliente Twitter desktop desenvolvido na Parte 1, é possível atualizar o status do seu Twitter após conceder a MyTtDesktopClient
acesso aos seus dados mantidos no Twitter. Para um usuário que retorna, é uma boa experiência do usuário, visto que o token de acesso pode ser reutilizado.
A Parte 2 mostrou como usar OAuth para desenvolver um cliente Twitter Web que permite que os usuários sejam autenticados para o Twitter por meio de OAuth e atualizem seu status. Ela também mostra as linhas de tempo de amigos.
Neste artigo, você verá como fazer o seu aplicativo da Web funcionar em um ambiente de produção. Você migrará o cliente Twitter desenvolvido na Parte 2 para o Google App Engine (GAE). Não é possível simplesmente implantar o arquivo WAR; algumas modificações são necessárias para fazê-lo funcionar no GAE. A forma mais fácil de trabalhar com o GAE é usar o Google Plugin for Eclipse, que suporta o desenvolvimento de GAE e Google Web Toolkit (GWT).
É possível fazer o download do código de amostra usado neste artigo.
O GAE, que é fornecido pelo Google, permite que aplicativos da Web sejam executados na infraestrutura do Google. Um grande benefício do GAE é que os seus aplicativos podem ser dimensionados com facilidade à medida que o armazenamento de dados e o tráfego precisar crescer. É possível enfocar o desenvolvimento de software sem se preocupar com a manutenção da Web e do servidor de banco de dados. Com uma quantidade razoável de tráfego para os seus aplicativos implantada no GAE, é possível utilizá-lo gratuitamente. Quando cada vez mais usuários forem atraídos para o seu site, será possível adquirir mais tempo de CPU e armazenamento de dados do Google. No momento da redação deste artigo, GAE suporta Python e código Java™ .
Registre seu aplicativo da Web com o Google
Todos os aplicativos do GAE precisam ser registrados no Google.
- Se você não tiver uma conta Google, crie uma.
- Acesse Google App Engine e faça login.
- Clique em Create an Application. Você será solicitado a fornecer seu país e número de celular.
O Google enviará um código de verificação ao seu celular.
- Após a verificação, faça logon no GAE e clique em Create an Application para criar seu aplicativo da Web.
Por exemplo, eu forneci as seguintes informações ao registrar meu aplicativo:
- Identificador do aplicativo: dr-yang-tt.appspot.com
Escolha seu próprio identificador exclusivo.
- Título do aplicativo: DR YANG's Twitter Client
- Opções de autenticação: clique no link Edit , selecione Restricted to
the following Google Apps domain e deixe a caixa vazia.
Por padrão, seu site está aberto a todos os usuários de conta Google, mas aqui a configuração acima permite que todos acessem seu site (usuários de conta Google e usuários de conta não Google).
Registre seu aplicativo da Web no Twitter
Se você tiver acompanhado a duas primeiras partes desta série, poderá registrar um novo aplicativo ou modificar um aplicativo registrado existente com o Twitter. O aplicativo de exemplo foi registrado, como mostrado abaixo, como um novo aplicativo emhttp://twitter.com/oauth_clients.
- Nome do aplicativo Dr Yang's Tt Web Client
- Descrição: Um Web client Twitter em execução dentro do Google app engine
- Web site do aplicativo: http://dr-yang-tt.appspot.com/twitterwebclient
- Tipo de aplicativo: navegador
- URL de retorno: http://dr-yang-tt.appspot.com/twitterwebclient
Certifique-se de definir a URL de retorno correta; não é preciso usar a função de customização de URL de retorno descrita naParte 2.
- Tipo de acesso padrão: leitura & gravação
Você quer conceder acesso de gravação aos usuários.
- Usar Twitter para login: Não
Assim que tiver registrado o seu aplicativo com êxito, você obterá uma chave do consumidor, um segredo do consumidor e três URLs (URL de token de solicitação, URL de token de acesso e URL de autorização). A chave do consumidor e o segredo do consumidor serão definidos em WEB-INF/web.xml.
Desenvolver e testar o cliente Twitter no GAE
Conforme já mencionado, o exemplo usa Google Plugin para Eclipse para desenvolvimento. No momento da redação deste artigo, três versões do Eclipse são suportadas: 3.5 (Galileo), 3.4 (Ganymede) e 3.3 (Europa). O exemplo foi desenvolvido em uma máquina com Eclipse 3.5, portanto, o Google Plugin para Eclipse 3.5 foi usado para instalar o plug-in. A sugestão é instalar tudo fornecido pelo plug-in para que os desenvolvimentos em GAE e GWT sejam suportados. Quando o plug-in estiver instalado, siga do guia "Iniciação rápida" para saber como desenvolver seu aplicativo da Web Hello World e implementá-lo no GAE. (O fornecimento de um guia passo a passo está fora do escopo deste artigo.)
Após criar um projeto de aplicativo da Web no Eclipse, alguns modelos serão criados pelo Google Plugin. É possível trabalhar nesse projeto base para adicionar o código de exemplo. A Figura 1 mostra os arquivos no projeto TwitterWebClient1. Uma explicação dos arquivos é apresentada após aFigura 1.
Quando o projeto foi criado, o GWT não tinha sido escolhido. Ative o GWT caso esteja familiarizado com ele. O GWT permite desenvolver aplicativos Ajax usando programação estilo Java Swing.
Figura 1. Projeto GAE
TwitterWebClient1 no Eclipse
- src/logging.properties
- Arquivo de configuração de criação de log Java. Pode ser mais fácil de usar em comparação com Log4J no GAE.
- src/dryang/twitterwebclient/IdAndAccessToken.java
- Classe de dados de entidade para Java Persistence API (JPA)
- src/dryang/twitterwebclient/JpaUtil.java
- Classe de utilitário JPA
- src/dryang/twitterwebclient/TwitterStatus.java
- Classe que representa uma linha do tempo do Twitter
- src/dryang/twitterwebclient/TwitterWebClientServlet.java
- O controlador principal do aplicativo, responsável pela autenticação de OAuth e pelas interações do usuário
- src/META-INF/jdoconfig.xml
- Arquivo de configuração Java Data Object (JDO). O exemplo não o utiliza.
- war/error.jsp
- Página JSP para manipular exceções
- war/Gnome-Edit-Delete-32.png
- Ícone de exclusão
- war/index.html
- Página de boas-vindas, que automaticamente redireciona o navegador do usuário para o nosso cliente Twitter
- war/login_twitter.html
- Página de login
- war/twitter_button_5_hi.gif
- Imagem do botão Sign-in
- war/update_twitter_status.jsp
- Página JSP para exibir as informações de Twitter do usuário
- war/WEB-INF/appengine-web.xml
- Arquivo de configuração da Web do GAE
- war/WEB-INF/web.xml
- Arquivo de configuração da Web padrão
Antes de compilar e implementar o código de origem no GAE:
- Não se esqueça de definir sua própria chave e seu próprio segredo de consumidor em web.xml.
- É necessário também colocar twitter4j-2.0.9.jar em war/WEB-INF/lib.
Twitter4J é uma biblioteca Java de software livre para TwitterAPI (consulte Recursos ).
- Adicione o arquivo JAR manualmente no caminho de desenvolvimento do seu projeto.
O núcleo do código, o servlet TwitterWebClient , é muito similar a MyTwitterServlet na Parte 2 desta série.
Entretanto, há algumas diferenças, conforme segue:
- O sistema de criação de log Java foi adotado porque não é fácil executar o trabalho Log4J com o GAE.
- O objeto
Twitternão é mais armazenado na sessão HTTP devido a problemas de serialização. Como deve ser de seu conhecimento, o GAE é um ambiente em cluster dinâmico. Tudo o que você armazena na sessão HTTP deve implementar a interfacejava.io.Serializable, como o exemplo faz com a classeTwitterStatus. Para resolver esse problema, o exemplo armazena o token de acesso na sessão de que um objeto doTwitterpode ser criado e autenticado. - O token de acesso do usuário não é mais salvo em arquivo de texto simples, mas no armazenamento de dados do GAE, que é diferente de um banco de dados tradicional. Felizmente, ele suporta JDO e JPA. O exemplo usa JPA. A documentação do Google, "Usando JPA com
App Engine," fornece instruções.
Em geral, configure JPA em persistence.xml. Crie classes de dados e uma classe de utilitário para obter uma instância
EntityManager. Neste aplicativo da Web, a classe de dados édryang.twitterwebclient.IdAndAccessTokene tem três campos:id,tokenetokenSecret. Consulte a Listagem 1. Você verá o prefixo "$" para o ID do Twitter do usuário nos métodosstoreAccessToken(...)eloadAccessToken(...)do servletTwitterWebClient. Isso acontece porqueidestá definido comojava.lang.String, enquanto o ID do Twitter é um inteiro. O armazenamento de dados do GAE não aceita um ID desse tipo como cadeia de caractere.
Listagem 1. Classe de dados 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
......
}
|
Após você finalizar todo o trabalho de desenvolvimento:
- Clique com o botão direito do mouse no projeto no Eclipse e selecione Google --> App Engine Settings....
Você deverá ver uma janela pop-up similar à Figura 2 abaixo.
- Forneça o ID do aplicativo correto (no exemplo,
dr-yang-tt). - Clique com o botão direito do mouse no projeto no Eclipse novamente e selecione Google --> Deploy to App Engine.
Seu aplicativo deverá ser implementado no GAE com êxito em pouco tempo.
Figura 2. Configurações do GAE no Eclipse
O GAE fornece uma interface de gerenciamento. Faça login na interface com a sua conta Google; você verá uma lista dos seus aplicativos. Figura 3 mostra um exemplo do aplicativo dr-yang-tt. Você verá que o link Logs é uma ferramenta muito útil para depurar o aplicativo.
Lembre-se do limite que o Twitter impõe a chamadas API. Quando o seu aplicativo entrar em produção, será possível solicitar mais acesso no Twitter. E com mais usuários sendo atraídos para o seu site, será preciso até mesmo adquirir mais tempo de CPU e espaço de armazenamento de dados do Google.
Figure 3. Interface de gerenciamento do GAE de
dr-yang-tt
Figura 4 mostra o aplicativo em execução no GAE.
Figura 4. Cliente Twitter habilitado para OAuth no GAE
Nesta série, você conheceu mais sobre o protocolo OAuth desenvolvendo um cliente Twitter desktop. Em seguida, você desenvolveu um Web client Twitter, que mostra como OAuth funciona perfeitamente com navegadores da Web. Este último artigo da série mostrou como implementar o Web client Twitter para o Google App Engine. Agora, é possível usar OAuth para acessar sites de rede social. Com OAuth, as credenciais dos usuários são protegidas enquanto compartilham recursos protegidos entre Web sites diferentes.
| Descrição | Nome | Tamanho | Método de download |
|---|---|---|---|
| Sample code for this article | oauth-part3-source-code.zip | 35KB | HTTP |
Informações sobre métodos de download
Aprender
-
OAuth Core 1.0 Revisão A descreve a especificação OAuth mais recente.
-
Leia Guia do iniciante para OAuth - Parte I: Visão geral , Guia do iniciante para OAuth - Parte II : Fluxo de trabalho de protocoloe Guia do iniciante para OAuth - Parte III : Arquitetura de segurança.
-
Twitter4J é uma biblioteca Java para TwitterAPI.
-
Google App Engine permite que você execute seus aplicativos da Web na infraestrutura do Google.
-
Kit de ferramentas Google Web permite que os desenvolvedores escrevam o front-end Ajax na linguagem de programação Java.
-
Google Plugin para Eclipse permite que você desenvolva aplicativos GWT e GAE eficientemente.
-
Usando JPA com App Engine mostra como usar Java Persistence API (JPA) no Google App Engine.
- My developerWorks: Personalize sua experiência no developerWorks.
- A
Zona de desenvolvimento da Web
no developerWorks é especializada em artigos que mostram várias soluções baseadas na Web.
Obter produtos e tecnologias
- Faça o download das versões de avaliação de produto IBM
ou o explore as versões de avaliação on-line no Sandbox SOA e entre em contato com as ferramentas de desenvolvimento de aplicativos e produtos de middleware do DB2®, Lotus®, Rational®, Tivoli®e WebSphere®.
Discutir
- Confira os
blogs do developerWorks
e participe da
comunidade do developerWorks.
