擴充套件 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 社群所有即將舉行的活動。

檢視所有