spring social facebook

使用 Spring Social 連接社交網絡
隨着社交網絡的流行,在應用中加入對主流社交網絡的支持變成了一個重要的功能。比如允許用戶使用第三方社交網絡的賬號,如 Twitter、Facebook、LinkedIn 或新浪微博的賬號,直接登錄;或是讀取用戶在其他社交網站上的信息等。很多社交網站都提供開放 API 允許開發人員使用,不過需要開發人員瞭解 OAuth 等其他實現細節。Spring Social 是 Spring 框架中的一個子項目,該項目提供了一個可擴展的框架,允許開發人員很方便地與其他社交網絡平臺進行集成,同時也提供了流行社交平臺的相關 API 支持。本文會詳細介紹 Spring Social 項目以及如何在項目中使用它。對於需要在應用中集成社交網站支持的開發人員來說,Spring Social 提供的功能是非常方便的。
社交網絡已經成爲目前人們生活中不可或缺的一部分。流行的社交網站,如 Facebook、LinkedIn、Twitter 和新浪微博等都聚集了非常高的人氣,成爲很多人每天必上的網站。大量的信息被分享到社交網絡中。對於一個應用來說,提供對社交網絡的支持是很有必要的。應用可以通過與社交網絡的集成來迅速積累人氣。與社交網絡的集成主要有兩個方面的功能:第一個是比較簡單的用戶登錄集成,即允許用戶使用社交網絡網站上的已有賬戶來登錄應用。這樣做的好處是可以省去要用戶重新註冊的流程,同時也可以與用戶已有的社交網絡建立連接;第二個是深度的集成方式,即允許用戶把應用中的相關內容分享到社交網絡中。這樣做的好處是可以保持用戶的粘性,同時推廣應用本身。
在應用中集成社交網絡並不是一件複雜的工作。很多社交網絡服務都提供開放 API 允許第三方應用來進行集成。只需要參考相關的文檔就可以完成。不過集成本身需要一定的工作量。所需要集成的網站越多,相應的工作量越大。Spring Social 作爲 Spring 框架組件家族中的一部分,提供了對社交網絡服務的抽象,並提供了相關的 API 來進行操作。
使用 Spring Social 的最大好處在於它已經提供了對主流社交網站的支持,只需要簡單配置即可。對於一些不太常用的社交網站,也可以從社區中找到相應的組件。本文以一個示例應用來說明 Spring Social 的用法。
示例應用
該示例允許用戶登錄社交網站查看他們的好友信息。這是一個使用 Spring MVC 框架構建的 Web 應用。該應用使用嵌入式的 H2 數據庫來存儲數據。前端使用 JSP、JSTL 和 Spring 提供的標籤庫,利用 Apache Tiles 進行頁面佈局。使用 Spring Security 管理用戶認證。頁面的樣式使用 Twitter Bootstrap 庫。項目使用 Gradle 進行構建。前端庫通過 Bower 進行管理。
示例所提供的功能比較簡單,主要包括登錄和註冊頁面,以及用戶的首頁。在登錄時,用戶可以選擇使用第三方社交網絡的賬號。登錄之後可以查看社交網絡的好友信息。
回頁首
使用社交網絡已有賬號登錄
與社交網絡集成的最基本的功能是允許用戶使用已有的賬號進行登錄。用戶除了註冊新的賬號之外,還可以使用已有的其他網站的賬號來登錄。這種方式通常稱爲連接第三方網站。對於用戶來說,通常的場景是在註冊或登錄頁面,選擇第三方社交網絡來進行連接。然後跳轉到第三方網站進行登錄和授權。完成上述步驟之後,新的用戶會被創建。在連接過程中,應用可以從第三方社交網站獲取到用戶的概要信息,來完成新用戶的創建。當新用戶創建完成之後,下次用戶可以直接使用第三方社交網絡的賬號進行登錄。
基本配置
Spring Social 提供了處理第三方網站用戶登錄和註冊的 Spring MVC 控制器(Controller)的實現,可以自動完成使用社交網絡賬號登錄和註冊的功能。在使用這些控制器之前,需要進行一些基本的配置。Spring Social 的配置是通過實現 org.springframework.social.config.annotation.SocialConfigurer 接口來完成的。代碼清單 1給出了實現 SocialConfigurer 接口的 SocialConfig 類的部分內容。註解“@EnableSocial”用來啓用 Spring Social 的相關功能。註解“@Configuration”表明該類也同樣包含 Spring 框架的相關配置信息。SocialConfigurer 接口有 3 個方法需要實現:
addConnectionFactories:該回調方法用來允許應用添加需要支持的社交網絡對應的連接工廠的實現。
getUserIdSource:該回調方法返回一個 org.springframework.social.UserIdSource 接口的實現對象,用來惟一標識當前用戶。
getUsersConnectionRepository:該回調方法返回一個 org.springframework.social.connect.UsersConnectionRepository 接口的實現對象,用來管理用戶與社交網絡服務提供者之間的對應關係。
具體到示例應用來說,addConnectionFactories 方法的實現中添加了由 org.springframework.social.linkedin.connect.LinkedInConnectionFactory 類表示的 LinkedIn 的連接工廠實現。getUserIdSource 方法的實現中通過 Spring Security 來獲取當前登錄用戶的信息。getUsersConnectionRepository 方法中創建了一個基於數據庫的 JdbcUsersConnectionRepository 類的實現對象。LinkedInConnectionFactory 類的創建方式體現了 Spring Social 的強大之處。只需要提供在 LinkedIn 申請的 API 密鑰,就可以直接使用 LinkedIn 所提供的功能。與 OAuth 相關的細節都被 Spring Social 所封裝。
清單 1. 使用 Spring Social 的基本配置
點擊查看代碼清單
登錄控制器
配置了 Spring Social 的下一步是創建相應的 Spring MVC 控制器來處理用戶的註冊和登錄。Spring Social 已經提供相應的控制器實現,只需要創建界面來發出請求即可。首先要創建的是通過第三方社交網絡進行登錄的控制器。如代碼清單 2 所示,只需要創建一個 Spring Bean 就可以創建所需要的控制器。該控制器默認綁定在“/signin”的 URL 上面。每個第三方服務提供者都有一個對應的標識符,如 LinkedIn 的標識符是“linkedin”。服務提供者的標識符通常作爲不同控制器 URL 的一部分。比如當用戶需要通過 LinkedIn 賬戶來登錄時,對應的 URL 就是“/signin/linkedin”。如果通過 Twitter 賬戶來登錄,則對應的 URL 是“/signin/twitter”。
清單 2. 通過第三方社交網絡進行登錄的控制器
點擊查看代碼清單
在上面的代碼清單 2 中,SimpleSignInAdapter 類實現了 org.springframework.social.connect.web.SignInAdapter 接口,其作用是 ProviderSignInController 類和應用本身的登錄邏輯之間的橋樑。當用戶完成第三方網站的登錄之後,通過 SignInAdapter 接口來使得該用戶自動登錄到應用中。SimpleSignInAdapter 類的實現如代碼清單3所示。
清單 3. SimpleSignInAdapter 類的實現
public class SimpleSignInAdapter implements SignInAdapter {
private final RequestCache requestCache;
@Inject
public SimpleSignInAdapter(RequestCache requestCache) {
this.requestCache = requestCache;
}
@Override
public String signIn(String localUserId, Connection

發佈了22 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章