扩展 Spring Social 的服务提供商框架

工程 | Craig Walls | 2011年3月10日 | ...

上周,我向您介绍了 Spring Social 的服务提供商“连接”框架,并向您展示了它如何简化用户本地应用程序帐户与其在软件即服务 (SaaS) 提供商上的帐户之间的连接创建。今天,我想向您展示如何扩展服务提供商框架,以处理与 Spring Social 不直接支持的提供商的连接。

为 Netflix 扩展 Spring Social

假设您正在开发一个电影评论网站,用户可以在其中阅读和发布简短的电影评论。通常,电影评论会显示在主页上,最新的条目排在最前面。但是,如果用户将其帐户与 Netflix 帐户关联,那么您就可以向他们展示他们在 Netflix 影碟队列中的电影评论。为了实现这一点,您希望利用 Spring Social 的服务提供商框架来连接您的用户帐户与他们的 Netflix 帐户。Spring Social 1.0.0.M2 不包含 Netflix 服务提供商或 API 绑定,但可以轻松扩展以支持未直接支持的提供商。

在本文中,我将向您展示如何基于 Spring Social 的服务提供商框架,启用与 Netflix 的连接。我们将首先开发一个 Netflix 服务提供商实现,然后构建一个简单的 API 绑定来支持我们应用程序的需求。用于开发 Netflix 服务提供商的技术可以应用于扩展 Spring Social 以支持几乎任何服务提供商。您可以查看 GitHub 上的示例代码 来进行学习。

了解 Netflix 的授权 API

在我们开始开发 Netflix 服务提供商实现之前,我们需要做一些初步研究,以了解 Netflix 授权 API 的基本工作原理。

我们需要确定的第一件事是 Netflix 使用哪种授权协议。Netflix API 文档的 身份验证概述 部分告诉我们,他们使用 OAuth,但并未明确说明使用的是哪个版本的 OAuth 规范。因此,需要进行一些侦探工作。

页面向下滚动一点(在“那些讨厌的 OAuth 参数”标题下),我们看到了关于客户端密钥、随机数和时间戳的提及。这些都不是 OAuth 2 所适用的,所以 Netflix 必须是一个 OAuth 1 提供商。此外,oauth_version 参数设置为“1.0”的描述进一步证实了 Netflix 实现的是 OAuth 1。

现在我们知道 Netflix 使用 OAuth 1。但同样重要的是要知道他们是实现了规范的 1.0 版本还是 1.0a 版本。服务提供商通常不会在其文档中明确说明这一点,而且在任何一种情况下 oauth_version 的值都应该是“1.0”。然而,有一些蛛丝马迹表明使用了特定版本的 OAuth 规范。以下是一些表明 OAuth 1.0 正在使用的线索:

  • oauth_callback 参数在授权 URL 上发送,而不是在请求令牌请求中发送。
  • 没有验证器的概念,并且不需要将 oauth_verifier 参数发送到访问令牌 URL。

对于 OAuth 1.0a,请留意以下迹象:

  • oauth_callback 参数在请求令牌请求中发送,而不是在授权 URL 中发送。
  • 在回调中从提供商那里收到验证器,并且需要将 oauth_verifier 参数发送到访问令牌 URL。

通过在 Netflix 文档中寻找这些线索,我们确定 Netflix 使用的是 OAuth 1.0(而不是 1.0a)。这个信息很重要,在我们定义服务提供商实现时会很有用。

最后,我们需要知道请求令牌、授权和访问令牌的 URL 是什么。页面再往下(在“发起受保护调用”标题下),您会找到细节,告知我们所需的 URL 如下:

  • 请求令牌 URL: http://api.netflix.com/oauth/request_token
  • 授权 URL: https://api-user.netflix.com/oauth/login
  • 访问令牌 URL: http://api.netflix.com/oauth/access_token

请特别注意请求令牌和访问令牌 URL 中使用的协议。大多数提供商在这方面很灵活,建议您使用 HTTPS。然而,根据我与 Netflix 打交道的经验,我发现如果您通过 HTTPS 请求请求令牌或访问令牌,Netflix 会抱怨请求签名无效。不过,授权 URL 在 HTTPS 上工作正常。

开发 Netflix 服务提供商实现

要创建新的服务提供商实现,我们需要扩展 AbstractOAuth1ServiceProviderAbstractOAuth2ServiceProvider。这两个类分别提供了 OAuth 1.0/1.0a 和 OAuth 2 的特定 OAuth 版本的基础功能。由于 Netflix 是一个 OAuth 1.0 提供商,我们的 NetFlixServiceProvider 需要扩展 AbstractOAuth1ServiceProvider


package org.springframework.social.movies.netflix;
import org.springframework.social.connect.oauth1.AbstractOAuth1ServiceProvider;
import org.springframework.social.connect.support.ConnectionRepository;
import org.springframework.social.oauth1.OAuth1Template;

public final class NetFlixServiceProvider extends AbstractOAuth1ServiceProvider<NetFlixApi> {

    public NetFlixServiceProvider(String consumerKey, String consumerSecret, ConnectionRepository connectionRepository) {
        super("netflix", connectionRepository, consumerKey, consumerSecret, 
            new OAuth…

本周 Spring 动态:2011 年 3 月 8 日

工程 | Josh Long | 2011 年 3 月 9 日 | ...

本周见证了又一轮激动人心的新版本和更新、精彩的社区内容以及欢迎 WaveMaker 加入 SpringSource 大家庭的激动人心的公告。

  1. Rod Johnson 在 SpringSource 博客中宣布了今天收购 WaveMaker 的消息。 WaveMaker 是一个广泛使用的图形化工具,使非专业开发者能够快速构建 Web 应用程序。文中提到:“虽然 WaveMaker 已经是 Spring 生态系统的一部分,但它现在将成为 Spring 家族和 VMware 云战略不可或缺的一部分。WaveMaker 的所有员工都将加入 VMware。” 令人兴奋……

面向庞大新受众:VMware收购WaveMaker

工程 | Rod Johnson | 2011年3月8日 | ...

今天,VMware通过此博客宣布收购WaveMaker,这是一款广泛使用的图形工具,能让非专业开发人员快速构建Web应用程序。虽然WaveMaker已经成为Spring生态系统的一部分,但现在它将成为Spring家族和VMware云战略的组成部分。WaveMaker的所有员工都将加入VMware。

此次收购通过赋能更多开发人员构建和运行现代应用程序,从而进一步推进VMware的云应用平台战略,这些应用程序能与底层基础设施共享信息,以最大限度地提高性能、质量……

本周 Spring:2011 年 3 月 1 日

工程 | Josh Long | 2011 年 3 月 2 日 | ...

本周见证了又一波令人兴奋的新版本和更新,以及很棒的社区内容。

准备好迎接惊喜吧!

让我们直接开始。

  1. Spring Roo 1.1.2 已发布。 与上个月发布的 1.1.1 版本相比,这个新版本包含了 200 多个增强功能、新功能和修复。一些亮点包括增强的工具可用性、持久性增强、GWT 和 Spring MVC 增强以及库升级。
  2. Martin Lippet 刚刚宣布了 SpringSource Tool Suite 的 2.5.2.SR1 和 2.6.0.M2 版本。

    2.5.2.SR1 “更新”增加了对 Groovy 1.7.8、Grails 1.3.7 的支持,更新了 Eclipse Helios SR2 (3.2.6),以及刚刚发布的 Spring Roo 1.1.2。2.6.0.M2 预览版还包括了一个 Roo 插件管理器,对 @RequestMapping 的支持得到了改进,并且 Groovy 和 Grails 工具也得到了大量改进。

  3. Martin Lippet 还整理了关于一个经常被问到且现已得到解答的问题的信息:如何

    贡献自定义项目…

介绍 Spring Social 的服务提供商框架

工程 | Craig Walls | 2011 年 3 月 2 日 | ...

在我之前的帖子中,我向您介绍了 Spring Social 到流行的软件即服务 (SaaS) API(如 Twitter、Facebook、LinkedIn 和 TripIt)的 Java 绑定。除了提供常见 API 操作的简单、强类型的 Java 方法外,这些绑定还可以确保每个 HTTP 请求都包含必要的凭据,以便授权您的应用程序代表用户调用 API。

我的第一个帖子没有解决的问题是:我们如何管理代表用户调用服务 API 所需的凭据? 我很高兴地告诉大家,我们现在有了这些问题的答案。

本周早些时候,我们宣布了 Spring Social 项目第二个里程碑版本的发布。Spring Social 1.0.0.M2 中最重要的新功能是引入了服务提供商“连接”框架。今天,我想向您介绍这个框架,并向您展示如何使用它来管理与 SaaS 提供商的“连接”。

本文中的示例来自 Spring Social Showcase。要进行跟随,请克隆存储库并按照 README 构建和部署示例应用程序。

获取 Spring Social

随着 M2 版本的发布,Spring Social 已被拆分为多个模块

  • spring-social-core - 服务提供商框架、OAuth 支持和核心类。
  • spring-social-web - 连接控制器和支持类型。
  • spring-social-facebook - 用于连接 Facebook 和支持通过 Facebook 登录应用程序的服务提供商实现。
  • spring-social-twitter - 用于连接 Twitter 和支持通过 Twitter 登录应用程序的服务提供商实现。
  • spring-social-linkedin - 用于连接 LinkedIn 的服务提供商实现。
  • spring-social-tripit - 用于连接 TripIt 的服务提供商实现。
  • spring-social-github - 用于连接 GitHub 的服务提供商实现。
  • spring-social-gowalla - 用于连接 Gowalla 的服务提供商实现。
  • spring-social-test - 支持测试服务提供商实现和 API 绑定。

根据您的需求,您不一定需要所有这些模块。最少,您需要核心模块。您可以将其添加到 Maven 构建的项目中,如下所示:


<dependency>
    <groupId>org.springframework.social</groupId>
    <artifactId>spring-social-core</artifactId>
    <version>1.0.0.M2</version>
</dependency>

在您可能在 Web 应用程序中使用 Spring Social 的情况下,您还需要 Web 模块


<dependency>
    <groupId>org.springframework.social</groupId>
    <artifactId>spring-social-web</artifactId>
    <version>1.0.0.M2</version>
</dependency>

然后,您需要添加一个或多个提供商模块。在我们的示例中,我们将讨论将 Twitter 连接添加到应用程序,因此我们需要 twitter 模块


<dependency>
    <groupId>org.springframework.social</groupId>
    <artifactId>spring-social-twitter</artifactId>
    <version>1.0.0.M2</version>
</dependency>

由于我们正在基于 Spring Social 的预览版本进行开发,因此我们需要将 Spring 的预览存储库添加到 pom.xml 文件中


<repository>
	<id>org.springframework.maven.milestone</id>
	<name>Spring Maven Milestone Repository</name…

Green Beans:Spring Integration 入门

工程 | Josh Long | 2011 年 2 月 24 日 | ...

应用程序不是孤立存在的。它们需要与客户和其他应用程序进行通信。应用程序集成就是实现这种通信。集成使应用程序能够共享服务和数据,而且,同样重要的是,集成可以帮助应用程序与用户连接。

Spring Integration 提供了一个构建集成解决方案的框架,以促进这类解决方案。Spring Integration 解决方案描述了数据流经管道的过程。数据作为消息进入处理管道。消息向前移动…

SpringSource Tool Suite 中的自定义项目模板

工程 | Martin Lippert | 2011 年 2 月 24 日 | ...

SpringSource Tool Suite (STS) 提供了“新建 Spring 模板项目”向导。用户可以使用此向导查看多个项目模板,选择一个,然后让向导根据该模板描述创建一个完整的项目。虽然这提供了一种创建新项目的便捷方式,但您可能希望为您的团队或组织定义自己的自定义项目模板。接下来我们将演示如何做到这一点。

1. 步骤:向 STS 贡献新的资源扩展

STS 通过下载和读取资源 XML 文件来创建可用项目模板的列表。要让 STS 知道这些资源文件的位置,您需要通过扩展将其贡献给 STS。

因此,第一步是创建一个新的空插件项目。您不需要其中的 Java 代码,所以不要将其创建为 Java 项目。只需创建一个…

本周 Spring:2011 年 2 月 22 日

工程 | Josh Long | 2011 年 2 月 23 日 | ...

多么精彩的一周!本周有大量来自社区和面向社区的基础性内容。让我们直接开始。

     <li> <a href="http://blog.springsource.com/2011/02/21/spring-3-1-m1-mvc-namespace-enhancements-and-configuration/">Rossen Stoyanchev</a> continues the whirlwind introduction to the new features in Spring 3.1, this time with a look at the MVC namespace and @Configuration-based improvements. </li>
    
  1. Chris Beams 撰写了关于 Spring 3.1 中即将推出的FeatureSpecification 支持的博客。Feature Specifications 提供与 XML 命名空间基础结构元素(如 <tx:annotation-driven>)相同的功能,但以 Java 配置为中心。这是一个非常强大的功能,这篇博客是入门的最佳方式。
  2. SpringSource Tool Suite 的负责人 Christian Dupuis - 发推文说用户现在可以下载 STS 而无需填写注册表单。太棒了!
  3. <li> Can't get enough Spring? 
    

    在您最喜欢的社交网络上关注 Spring!

  4. Glyn Normington 刚刚宣布 Eclipse Virgo 3.0.0.M01 发布,现已可下载。新版本提供了与 Eclipse 堆栈更紧密的集成,包括 Eclipse Virgo Jetty…

Spring 3.1 M1:缓存抽象

工程 | Costin Leau | 2011 年 2 月 23 日 | ...

Spring Framework 3.1 M1 中添加的主要功能之一是通用缓存抽象,用于透明地将缓存应用于 Spring 应用程序。就像事务支持一样,缓存抽象允许一致地使用各种缓存解决方案,而对代码的影响最小。

目的

缓存通常用于通过透明地以更快的速度提供频繁访问的数据来提高应用程序性能,例如从本地内存而不是网络提供数据。你们中的许多人已经使用过缓存,无论是有意还是无意:大多数 ORM/JPA 框架都提供…

Spring 3.1 M1:MVC 命名空间增强和 @Configuration

工程 | Rossen Stoyanchev | 2011 年 2 月 21 日 | ...

在这系列描述Spring 3.1 M1 功能的第五篇文章中,我将重点介绍 Web 应用程序。上半部分我将讨论 MVC XML 命名空间的增强。然后我将展示如何使用全 Java 配置创建等同于 MVC 命名空间的功能。最后,我将提到您可以在 3.1 M2 中期望的一些与 Servlet 3.0 相关的配置更改。

MVC 命名空间改进

Spring MVC 3.0 提供了一个自定义 MVC 命名空间。该命名空间的核心——<mvc:annotation-driven> 元素,配置了处理带有注解的控制器方法的请求所需的一切。但更重要的是…

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

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

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

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

查看所有