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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章