2010年11月01日 星期一 13:57
OAuth 提供了一种更好的方式供消费者站点访问用户保存在服务提供商处的受保护资源。通过使用 OAuth,用户凭证绝不会暴露给除最初保存用户数据的位置以外的站点。通过使用
第 1 部分
中开发的桌面 Twitter 客户机,您可以在授权
MyTtDesktopClient
访问您的 Twitter 数据后更新您的 Twitter 状态。对于返回的用户,这是一种良好的用户体验,因为访问令牌可以被重用。
第 2 部分
展示了如何使用 OAuth 开发一个 Web Twitter 客户机,它使用户能够通过 OAuth 完成对 Twitter 的身份验证并更新他们的状态。它还显示了朋友们的时间表。
在本文中,您将了解如何使您的 Web 应用程序在一个生产环境中工作。您将把 第 2 部分 中开发的 Twitter 客户机迁移到 Google App Engine (GAE)。您不能简单地部署 WAR 文件;需要进行一些修改来让它在 GAE 下工作。处理 GAE 的最简单的方法是使用 Google Plugin for Eclipse ,它支持 GAE 和 Google Web Toolkit (GWT) 开发。
您可以 下载 本文使用的样例代码。
GAE 由 Google 提供,使 Web 应用程序能够运行在 Google 的基础设施上。GAE 的一大优势就是您的应用程序可以轻松地随着通信量和数据存储需求的增长而扩展。您可以侧重于软件开发而不需要担心 Web 和数据库服务器维护。当您部署到 GAE 上的应用程序的流量适度时,您可以免费使用它。当越来越多的用户被吸引到您的网站,那么可以从 Google 购买更多 CPU 时间和数据存储。在撰写本文之际,GAE 可以同时支持 Python 和 Java™ 代码。
所有 GAE 应用程序都需要在 Google 上注册。
Google 将向您的手机发送一个验证码。
例如,我在注册我的应用程序时提供了以下信息:
选择您自己的惟一标识符。
默认情况下,站点将公开给所有 Google 帐户用户,但是以上这些设置使每个人都能访问您的站点(拥有 Google 帐户的用户和非 Google 用户)。
如果您已经阅读了本系列的前两篇文章,那么您可以注册一个新的应用程序或是修改 Twitter 中的已注册应用程序。如下所示,示例应用程序被注册为一个新的应用程序,位于 http://twitter.com/oauth_clients。
确保设置正确的回调 URL;您不需要使用 第 2 部分 中描述的回调 URL 定制功能。
您需要赋予用户写访问权。
一旦成功注册应用程序后,您将获得一个 consumer key 、一个 consumer secret 和三个 URL(请求令牌 URL、访问令牌 URL 和授权 URL)。Consumer key 和 consumer secret 将在 WEB-INF/web.xml 中设置。
如上所述,示例使用 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 开发。完成插件安装后,遵循 "Quick Start" 指南,了解如何开发您的 hello world Web 应用程序并将其部署到 GAE。(提供详细的指导超出了本文的范围)。
在 Eclipse 内创建了 Web Application Project 后,Google Plugin 将为您创建一些模板。可以在这个基础项目之上添加示例代码。
图 1
展示了
TwitterWebClient1
项目下的文件。
图 1
下面对这一文件进行了解释。
在创建项目时,并没有选中 GWT 支持。如果熟悉 GWT 的话,您可能需要启用它。GWT 使您能够使用 Java Swing 风格的编程开发 Ajax 应用程序。
TwitterWebClient1
在编译并将 源代码 部署到 GAE 之前:
Twitter4J 是一个开源的 Java 库,面向 TwitterAPI(参见 参考资料 )。
核心代码
TwitterWebClient
servlet 非常类似于
第 2 部分
中的
MyTwitterServlet
。但是,有一些不同之处,如下所示:
Twitter
对象不再存储在 HTTP 会话中。您可能已经知道,GAE 是一个动态的集群环境。您存储在 HTTP 会话中的所有内容都必须实现
java.io.Serializable
接口,如示例对
TwitterStatus
类所作的操作一样。为了解决这个问题,将访问令牌存储到会话中,在该会话中将创建一个
Twitter
对象并进行身份验证。
总的来说,需要在 persistence.xml 内部配置 JPA。创建数据类和一个实用类来获取
EntityManager
实例。在这个 Web 应用程序中,数据类为
dryang.twitterwebclient.IdAndAccessToken
,它有三个字段:
id
、
token
和
tokenSecret
。参见
清单 1
。您可能会注意到
TwitterWebClient
servlet 的
storeAccessToken(...)
和
loadAccessToken(...)
方法内的用户 Twitter ID 的 “
$
” 前缀。这是因为
id
被设置为一个
java.lang.String
,而 Twitter ID 是一个整数。GAE 数据存储不会接受字符串形式的 ID。
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 ...... } |
完成所有开发工作后:
您应当会看到类似于 图 2 所示的弹出窗口。
dr-yang-tt
)。
您的应用程序稍后就会被成功部署到 GAE。
GAE 提供了一个
管理界面
。使用您的 Google 帐户登录到该界面;应当会看到您的应用程序列表。
图 3
显示了
dr-yang-tt
应用程序的示例。您会发现 Logs 链接对于调试应用程序非常有用。
注意 Twitter 对 API 调用的限制。一旦应用程序激活后,您可能需要更多地访问 Twitter。并且,当越来越多地用户被您的站点所吸引,您可能需要向 Google 购买更多的 CPU 时间和数据存储空间。
dr-yang-tt
的管理界面
图 4 展示了运行在 GAE 之上的应用程序。
2010年11月01日 星期一 15:25
之前为了翻墙看twitter这么干过,用GWT+Spring, 现在我那个应用好像不好用了, 反正用着别人的VPN, 就懒得更新了,呵呵
Zeuux © 2024
京ICP备05028076号