社交化 Spring 应用程序

工程 | Craig Walls | 2010年11月3日 | ...

越来越多的网民使用互联网与朋友、家人和同事通过社交网站联系。曾经通过电子邮件进行的对话,现在则变成了在Facebook墙上撰写的简短消息或Twitter上的简短推文。曾经通过握手建立的联系,现在则通过LinkedIn建立。而当需要面对面会议时,行程细节可以通过TripIt共享。

正如人们使用这些社交网站相互互动一样,企业也正在寻找方法将自己融入社交图谱,以便能够以更个性化的方式与客户建立联系,并将他们的网站扩展为客户社交体验的一部分。

本周,我们很高兴地发布了Spring Social的第一个里程碑版本,这是一个Spring的新扩展,旨在提供一个平台,用于构建支持社交功能的Spring应用程序。我想借此机会向您介绍Spring Social,并让您了解它提供的功能。

安全共享社交数据

从表面上看,开发与各种社交网络交互的应用程序似乎很简单。由于大多数社交网络都提供REST API,Spring的RestTemplate似乎是您所需要的一切。但是您会很快发现,这些社交REST API受OAuth保护,并且使用OAuth凭据对通过RestTemplate发送的请求进行签名是一项非平凡的任务。

OAuth是一个开放协议,它允许用户与另一个应用程序共享其在一个或多个服务提供商处托管的数据。通过访问这些数据,应用程序可以以超出服务提供商本身预期或想象的方式汇总、呈现和处理信息。

几乎所有主要的服務提供商都支持OAuth,包括Twitter、Facebook、LinkedIn、TripIt和Foursquare,以及Google和Yahoo API。因此,OAuth对于开发支持社交功能的应用程序至关重要。

在OAuth安全交互的开始是一个来回对话,通常被称为“OAuth舞蹈”。在一个典型的OAuth舞蹈中,涉及三方

  • 服务提供商(例如Twitter或LinkedIn)
  • 想要访问或更新由该服务提供商托管数据的用户。
  • 用户想要与其共享数据的消费者应用程序。

此舞蹈的关键步骤如下

  1. 消费者应用程序将用户定向到服务提供商的站点以登录并授权消费者。
  2. 假设用户同意授予消费者访问其数据的权限,则流程将发送回消费者应用程序。
  3. 消费者应用程序从服务提供商接收访问令牌。

步骤3中收到的访问令牌是必须随任何对服务提供商的REST API的请求一起发送的“代客钥匙”。在OAuth 1中,这意味着访问令牌以及请求URL、参数和一些其他信息将一起收集在一个基本字符串中,进行加密,并作为Authorization标头在请求中发送。构建此标头并将其附加到请求是一项复杂的任务。这就是使用RestTemplate访问OAuth安全资源很困难的原因。如果您弄错了,服务提供商将对您尝试访问的任何资源返回HTTP 401,并且调试加密的Authorization标头很棘手。

使用社交模板

Spring Social的一个关键组件是其社交模板集合。这些模板(在幕后利用RestTemplate)公开其建模的服务提供商的操作,为您处理添加OAuth Authorization标头的复杂性。

Spring Social 1.0.0.M1包含4个可供选择的社交模板

  • TwitterTemplate
  • FacebookTemplate
  • LinkedInTemplate
  • TripItTemplate

要使用任何这些模板,只需创建一个实例,通过构造函数参数提供OAuth连接详细信息。例如,要创建TwitterTemplate的实例

TwitterTemplate twitter = new TwitterTemplate(apiKey, apiSecret, accessToken, accessTokenSecret);

TwitterTemplate构造函数的四个参数都是字符串值。当您向Twitter注册应用程序时,会为您提供API密钥和API密钥(请参阅http://dev.twitter.com/apps/new)。访问令牌和访问令牌密钥在与Twitter进行OAuth舞蹈结束时,按每个用户授予您的应用程序。在这一点上,我将假设您已经获得了所有这四个值;我们稍后将回顾如何管理API密钥和令牌。

创建其他社交模板的实例没有什么不同。LinkedInTemplateTripItTemplate各自具有与上面显示的TwitterTemplate构造函数相同的参数列表的构造函数。由于Facebook的API安全基于OAuth 2,因此FacebookTemplate具有稍微简单的构造函数,只需要访问令牌的值即可

FacebookTemplate facebook = new FacebookTemplate(accessToken);

一旦您拥有其中一个社交模板的实例,您可以用它做什么?如果您使用的是TwitterTemplate,您可能想知道已认证用户的Twitter屏幕名称

String screenName = twitter.getProfileId();

或者对于更复杂的事情,您也许可以代表用户发送一条推文

twitter.updateStatus("Hey, I'm tweeting with #Spring Social!");

同样,使用FacebookTemplate,您可以发布到用户的墙上

facebook.updateStatus("Spring Social can also post to Facebook!");

如果您想检查用户的即将到来的行程安排,TripItTemplategetTrips()可以满足您的需求

List trips = tripIt.getTrips();
for(Trip trip : trips) {
    System.out.println("I'm traveling to " + trip.getPrimaryLocation() +
                                 " on " + trip.getStartDate());
}

这只是您可以使用Spring Social模板执行的各种操作的示例。查看API文档以了解可用的其他操作。

管理OAuth连接

当我在上面创建TwitterTemplate实例时,我忽略了API密钥/密钥和访问令牌的来源。最初,访问令牌将在用户授权应用程序访问其在服务提供商处托管的数据后收到。但是您可能不想强制用户每次使用您的应用程序时都执行授权,因此您需要一种方法来长期存储访问令牌以供将来会话中重用。

在其第一个里程碑版本中,Spring Social没有提供OAuth令牌管理策略,而是让应用程序自己获取和管理OAuth详细信息。这是我们打算在1.0里程碑2中解决的问题。但是,与此同时,我们可以参考Greenhouse来了解这可能如何形成。

在Greenhouse中,关于服务提供商的所有信息都存储在关系数据库的ServiceProvider表中,其模式如下

如您所见,ServiceProvider表除其他外还包括提供商的API密钥和密钥。要访问单个服务提供商记录,Greenhouse使用JdbcServiceProviderFactory,这是ServiceProvider接口的实现

package com.springsource…

Spring Python 1.2.0.RC1 发布!

工程 | Greg L. Turnquist | 2010年11月3日 | ...

经过数月的努力,Spring Python 的第一个 1.2 版本现已推出

该项目已将其文档迁移到Sphinx,这是用于记录Python语言本身的相同工具。您可以访问项目网站,并以HTML格式查看它,或下载epub版本,以便在智能手机或平板电脑上查看。

此版本的Spring Python过渡到Python 2.6,放弃对2.4和2.5的支持。这意味着团队正在准备利用Python的许多新功能,这也为将来某个时候向Python 3.x过渡铺平了道路。

Spring Python具有……

Spring Integration 2.0 发布候选版本 1

工程 | Mark Fisher | 2010年10月29日 | ...

我们很高兴地宣布Spring Integration 2.0的第一个发布候选版本!下载 | 参考手册 | JavaDoc

我想借此机会提供一个通用的“新增功能?”指南。实际上,新增功能和改进太多,无法在一篇博文中全部介绍,但我将重点介绍一些亮点。随着我们越来越接近2.0 GA版本,我们将发布更多博客。目前,这篇文章大致基于Oleg和我上周在SpringOne上发表的演讲。该演讲主要是演示驱动的,代码可在我们的Git存储库中找到。

……

一个巨大的飞跃:Spring Roo 1.1.0 发布!

工程 | Ben Alex | 2010年10月27日 | ...

经过十多个月的开发和近900项改进,Spring Roo 1.1.0 已发布(在此下载)!与Spring Roo 1.1.0 GA版本同时发布的是Google Web ToolkitSpringSource Tool SuiteAspectJAJDT团队完成了支持GA版本,以便您可以享受所有这些工具的最新版本协同工作。

我们在Spring Roo 1.1.0中引入了许多新功能,很难决定要突出哪些功能。但是,让我们简要浏览一下我们为您的Java编程乐趣添加的一些好东西。

增量数据库逆向工程

现在可以反向工程现有的关系型数据库,并自动创建带有相应字段的 Roo 实体。但是,使用 JPA 工具很久以前不就可以做到吗?是的,绝对可以。关键的区别在于 Roo 的数据库反向工程是**增量的**。这意味着当 Roo 反向工程一个数据库时,它会将发现的所有字段放入类型间声明 (ITD) 中。这与 Roo 的其余部分一致,并允许 Roo 轻松地交付反向工程实体的往返维护。特别是,您可以重复地重新检查数据库以识别任何更改,同时确保您在 .java 源代码中编写的任何代码都得以保留。Roo 甚至会删除不再存在的实体(除非您要求 Roo 不要这样做),并且 Roo 会自动处理诸如复合主键之类的复杂情况(包括标识符类的创建和维护……

介绍 Gemfire 的 GORM

工程 | Graeme Rocher | 2010 年 10 月 26 日 | ...

NoSQL 数据存储兴起的原因之一是需要将应用程序扩展到关系型世界中传统的舒适区域之外。具有讽刺意味的是,Gemfire 早在“NoSQL”一词甚至被创造出来之前就已经在做这件事了,它为世界上一些最大的金融机构提供了扩展能力。

Gemfire 不仅仅是一个缓存,而是一个完整的数据结构,支持网格计算、Map/Reduce、连续查询和事务性写入后处理。

对于那些参加了非常成功的 SpringOne2GX 大会主题演讲的人来说,这可能已经是旧闻了。对于其他人,今天我很高兴地宣布 Gemfire 的 GORM 可用了……

SpringOne2GX 2010:推动 Java 创新进入云端

工程 | Rod Johnson | 2010 年 10 月 22 日 | ...

我们目前正在庆祝我们的第 6 届 SpringOne 2GX 开发者大会——从去年开始,也庆祝 Groovy 和 Grails。像往常一样,与让 Spring 成为现象级存在的开发者社区一起交流非常棒。今年,我们不仅有创纪录的出席人数(比去年翻了一番!)和梦幻般的合作伙伴阵容(由 Googlesalesforce.comAccenture 领衔),而且还有大量举措与我们的社区分享。

有这么多话题要讨论,这很容易变成历史上最长的博客文章。相反,让我们讨论一些亮点……

Java EE 6 服务器上的 Spring 3

工程 | Juergen Hoeller | 2010 年 10 月 20 日 | ...

在 Java EE 6 服务器上使用 Spring——一个可行的组合吗?当您要部署到 Java EE 6 服务器时,您能否轻松地继续使用 Spring?在几个小时前刚刚开始的今年的 SpringOne 大会 上,我将再次做一个关于 Spring 和 EE 6 的演讲:现在重点关注 GlassFish 3,它是一个可用的(并且在目前,仍然是唯一可用的)用于生产环境的 EE 6 服务器。作为抢先预览,以下是来自该演示文稿的四个关键考虑因素……

1. 像 GlassFish 3 这样的 Java EE 6 服务器是 Spring 3 的一个很好的运行时环境

GlassFish 3 提供了许多开箱即用的中间件:Servlet 3.0、JSF 2.0、JPA 2.0,等等……

VMware vFabric GemFire 6.5:现代应用程序的现代数据管理

工程 | Adam Fitzgerald | 2010 年 10 月 12 日 | ...

新的现代应用程序的一些特性是它们往往是高度交互式的、数据丰富的、包含业务流程的,并且可以通过网络从 PC 和移动设备访问。为这些应用程序提供支持的是那些利用虚拟化基础设施、提供恰当的功能并且能够随着需求变化轻松扩展的平台。

VMware 的 vFabric Cloud Application Platform 正是这样一个平台,它旨在以最有效的方式运行 Spring 应用程序并提供现代应用程序体验。该平台的一个重要组成部分是 vFabric GemFire。vFabric GemFire 内存分布式数据管理以低延迟、高可靠性和线性、动态可扩展性将数据提供给应用程序。我们很高兴地 宣布 vFabric GemFire 6.5 版本……

Gemini Web 发布候选版本

工程 | Glyn Normington | 2010 年 10 月 4 日 | ...

Gemini Web 项目的第一个发布候选版本可以从 此处下载。请查看 错误列表,了解自里程碑 4 以来发生了哪些变化。感谢 SAP 的 Violeta Georgieva 的持续贡献。

该项目将于 10 月 20 日进行 Eclipse 代码审查,以便它可以从孵化阶段毕业,并在 10 月底发布 1.1.0 版本。Virgo 项目依赖于 Gemini Web,也应该毕业并在与 Gemini Web 同时发布其 2.1.0 版本。

新的 Spring 集成示例

工程 | Oleg Zhurakousky | 2010 年 9 月 29 日 | ...

基于您对更多 Spring 集成 示例和更易用结构的强烈要求,我们很高兴地宣布以下内容

从当前版本的 Spring 集成开始,示例将不再包含在 Spring 集成发行版中。相反,我们转向了一个更简单的协作模型,这应该能够促进更好的社区参与和社区贡献。示例现在拥有一个专用的 Git SCM 存储库和一个专用的 JIRA 问题跟踪系统。示例开发也将拥有自己的生命周期,这并不依赖于……

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,以加速您的进步。

了解更多

获得支持

Tanzu Spring在一个简单的订阅中提供对OpenJDK™、Spring和Apache Tomcat®的支持和二进制文件。

了解更多

即将举行的活动

查看 Spring 社区中所有即将举行的活动。

查看全部