像我一样,无论是添加简单的Facebook“赞”按钮,一大堆“共享”按钮还是显示时间轴信息,您都不会注意到当前对应用程序“社交化”的热衷。 每个人都在做这件事,包括Spring的家伙,事实上,他们提供了一个称为Spring Social的溜溜的API,可让您将您的应用程序与许多软件即服务(SaaS)提要(例如Twitter, Facebook,LinkedIn等

本文以及接下来的一些博客通过演示Spring Social的使用来了解整个社交场景,而我将以非常基础的内容开始。

如果您看过Spring Social Samples,您会知道它们包含几个非常好的和完整的“ quickstart”应用程序。 一个用于Spring 3.0.x,另一个用于Spring3.1.x。 在研究这些应用程序时,让我印象深刻的是,您必须学习许多概念才能欣赏正在发生的事情。 这包括配置,外部授权,提要集成,凭证持久性等……大多数复杂性源于您的用户需要登录其软件即服务(SaaS)帐户(例如Twitter,Facebook或QZone)的事实,以便您的应用程序可以访问其数据1 。 由于周围有大量的SaaS提供程序以及它们使用的授权协议数量不同,这使情况更加复杂。

因此,我认为我将尝试将所有这些分解为各个单独的组件,以解释如何构建有用的应用程序; 但是,我将从一些背景开始。

Spring的家伙们正确地意识到,互联网上有如此众多的SaaS提供商,他们永远无法为所有这些提供商编写模块,因此他们将功能分为两部分,第一部分包括spring-social-corespring-social-web模块,为每个SaaS提供程序提供基本的连接性和授权代码。 提供所有这些听起来像是一项艰巨的任务,但它的简化之处在于,要成为SaaS提供者,您需要实现所谓的OAuth协议 。 我还没有介绍OAuth的详细信息,但简而言之,OAuth协议执行了一个复杂的小操作,允许用户与您的应用程序共享其SaaS数据(即他们在Facebook等上拥有的东西),而无需用户分发他们的您的应用程序的凭据。 至少有三个版本:1.0、1.0a和2.0,并且SaaS提供程序可以自由实现他们喜欢的任何版本,通常会添加自己的专有功能。
此拆分的第二部分包括SaaS提供程序模块,这些模块知道如何与最低级别的各个服务提供程序服务器进行通信。 Spring的家伙目前提供 基本服务 ,西方世界是 FacebookLinkedInTwitter 。 采用广泛的模块化方法的好处是,您还可以使用很多其他社区主导的模块:

  • Spring社交500px
  • Spring社交BitBucket
  • Spring社交挖掘
  • Spring社交保管箱
  • Spring社交展
  • Spring社交电影
  • Spring社交四方
  • Spring社交Google
  • Spring社交Instagram
  • Spring社交Last.fm
  • Spring Social Live(Windows Live)
  • Spring社会味iso
  • Spring社交Mixcloud
  • Spring社交Nk
  • Spring社会销售人员
  • Spring社交SoundCloud
  • Spring社交活动
  • Spring社交视频
  • Spring社交活动
  • Spring社交微博
  • Spring社会兴
  • Spring社交Yammer
  • Spring社会保障模块
  • Spring Social Grails插件

但是,这只是可用服务数量的一部分:要查看此列表的大小,请访问AddThis网站,并找出它们支持的服务。

返回代码

现在,如果您像我一样,那么在编程方面,您会讨厌安全性:从开发角度来看,这非常麻烦,会阻止您编写代码并使您的生活变得困难,所以我想我应该开始通过扔掉所有东西并编写一个显示一些基本SaaS数据的小应用程序。 事实证明,这可能是因为某些SaaS提供商(例如Twitter)同时服务于私有数据和公共数据。 私有数据是您需要登录的东西,而公共数据对任何人都可用。

在今天的场景中,我正在编写一个基本应用程序,该应用程序使用Spring Social Twitter Module在应用程序中显示Twitter用户的时间线,而您要做的只是Twitter用户的屏幕名称。

要创建该应用程序,第一步是使用SpringSource Toolkit仪表板的模板部分创建一个基本的Spring MVC项目。 这提供了一个Web应用程序,可帮助您入门。

第二步是将以下依赖项添加到pom.xml文件中:

<!-- Twitter API --><dependency><groupId>org.springframework.social</groupId><artifactId>spring-social-twitter</artifactId><version>${org.springframework.social-twitter-version}</version></dependency><!-- CGLIB, only required and used for @Configuration usage: could be removed in future release of Spring --><dependency><groupId>cglib</groupId><artifactId>cglib-nodep</artifactId><version>2.2</version></dependency>

上面的第一个依赖关系是针对Spring Social的Twitter API的,而第二个依赖关系是使用Spring 3的@Configuration注释配置应用程序所必需的。 请注意,您还需要通过添加以下内容来指定Twitter API版本号:

<org.springframework.social-twitter-version>1.0.2.RELEASE</org.springframework.social-twitter-version>

…到文件顶部的<properties>部分。

步骤3是您需要配置Spring的地方。 如果查看Spring Social示例代码,您会注意到Spring的家伙使用Java和Spring 3 @Configuration注释配置他们的应用程序。 这是因为基于Java的配置比基于XML的原始配置具有更大的灵活性。

@Configurationpublic class SimpleTwitterConfig {private static Twitter twitter;public SimpleTwitterConfig() {if (twitter == null) {twitter = new TwitterTemplate();}}/*** A proxy to a request-scoped object representing the simplest Twitter API* - one that doesn't need any authorization*/@Bean@Scope(value = 'request', proxyMode = ScopedProxyMode.INTERFACES)public Twitter twitter() {return twitter;}}

上面的代码所做的全部是通过Spring的Twitter接口为Spring提供一个简单的TwitterTemplate对象。 对于这个基本应用程序,使用@Configuration绝对是多余的,但是我将在以后的博客中继续使用它。

有关@Configuration批注和基于Java的配置的更多信息,请查看:

  1. Spring的基于Java的依赖注入
  2. 更多基于Spring Java的DI

编写完配置类后,接下来要做的就是整理控制器。 在这个简单的示例中,我使用了一个简单的@RequestMapping处理程序,该处理程序处理如下所示的URL:

<a href=timeline?id=roghughe>Grab Twitter User Time Line for @roghughe</a><br />

……代码看起来像这样:

@Controllerpublic class TwitterTimeLineController {private static final Logger logger = LoggerFactory.getLogger(TwitterTimeLineController.class);private final Twitter twitter;@Autowiredpublic TwitterTimeLineController(Twitter twitter) {this.twitter = twitter;}@RequestMapping(value = 'timeline', method = RequestMethod.GET)public String getUserTimeline(@RequestParam('id') String screenName, Model model) {logger.info('Loading Twitter timeline for :' + screenName);List<Tweet> results = queryForTweets(screenName);// Optional Step - format the Tweets into HTMLformatTweets(results);model.addAttribute('tweets', results);model.addAttribute('id', screenName);return 'timeline';}private List<Tweet> queryForTweets(String screenName) {TimelineOperations timelineOps = twitter.timelineOperations();List<Tweet> results = timelineOps.getUserTimeline(screenName);logger.info('Fond Twitter timeline for :' + screenName + ' adding ' + results.size() + ' tweets to model');return results;}private void formatTweets(List<Tweet> tweets) {ByteArrayOutputStream bos = new ByteArrayOutputStream();StateMachine<TweetState> stateMachine = createStateMachine(bos);for (Tweet tweet : tweets) {bos.reset();String text = tweet.getText();stateMachine.processStream(new ByteArrayInputStream(text.getBytes()));String out = bos.toString();tweet.setText(out);}}private StateMachine<TweetState> createStateMachine(ByteArrayOutputStream bos) {StateMachine<TweetState> machine = new StateMachine<TweetState>(TweetState.OFF);// Add some actions to the statemachinemachine.addAction(TweetState.OFF, new DefaultAction(bos));machine.addAction(TweetState.RUNNING, new DefaultAction(bos));machine.addAction(TweetState.READY, new ReadyAction(bos));machine.addAction(TweetState.HASHTAG, new CaptureTag(bos, new HashTagStrategy()));machine.addAction(TweetState.NAMETAG, new CaptureTag(bos, new UserNameStrategy()));machine.addAction(TweetState.HTTPCHECK, new CheckHttpAction(bos));machine.addAction(TweetState.URL, new CaptureTag(bos, new UrlStrategy()));return machine;}}

getUserTimeline方法包含三个步骤:首先,它包含一些推文,进行一些格式化,然后将结果放入模型中。 对于此博客,最重要的一点是掌握推文,您可以看到这是通过List <tweet> queryForTweets(String screenName)方法完成的。 此方法有两个步骤:使用Twitter对象获取TimelineOperations实例,然后使用该对象使用屏幕名称作为参数来查询时间线。

如果您查看Twitter界面,它将充当工厂对象,并返回其他对象来处理不同的Twitter功能:时间轴,直接消息传递,搜索等。我想这是因为开发人员意识到Twitter本身包含了如此多的功能,如果所有必需的方法都在一个类中,然后他们手上会有一个上帝对象 。

我还包括了将Tweets转换为HTML的可选步骤。 为此,我使用了State Machine项目和博客中的JAR,您可以在formatTweets(...)方法中查看其工作方式。

Tweet的列表作为属性放入模型后,要完成的最后一件事情是编写一个JSP来显示数据:

<ul><c:forEach items='${tweets}' var='tweet'><li><img src='${tweet.profileImageUrl}' align='middle'/><c:out value='${tweet.createdAt}'/><br/><c:out value='${tweet.text}' escapeXml='false'/></li></c:forEach>
</ul>

如果您实现了可选的锚标记格式,那么这里要记住的关键是确保浏览器可以使用格式化的TweetHTML。 这可以通过使用c:out标记的escapeXml ='false'属性或将$ {tweet.text}直接放入JSP中来实现。

在此示例中,我没有包含任何样式或花哨的前端,因此,如果您运行代码2 ,则应获得以下内容:

以上就是我对Spring Social的简单介绍,但是仍然有很多基础。 在我的下一个博客中,我将了解背景情况。

1我猜这里有很多隐私和数据保护合法性问题要考虑,尤其是如果您使用此API存储用户数据时,我希望对此发表评论和意见。

2该代码可在GitHub上的git项目中的git://github.com/roghughe/captaindebug.git上找到。

参考:来自Captain Debug博客博客的JCG合作伙伴 Roger Hughes的Spring Social入门 。

翻译自: https://www.javacodegeeks.com/2012/06/getting-started-with-spring-social.html

Spring Social入门相关推荐

  1. Spring Social入门–第2部分

    几周前,我写了一篇文章,展示了我认为可以使用Spring Social编写的最简单的应用程序. 该应用程序读取并显示了Twitter用户的公共数据,并被编写为Spring Social和社交编码领域的 ...

  2. spring social_Spring Social入门

    spring social 像我一样,无论是添加简单的Facebook"赞"按钮,一大堆"共享"按钮还是显示时间轴信息,您都不会注意到当前对应用程序" ...

  3. spring social_Spring Social入门–第2部分

    spring social 几周前,我写了一篇文章,展示了我认为可以使用Spring Social编写的最简单的应用程序. 该应用程序读取并显示了Twitter用户的公共数据,并被编写为Spring ...

  4. Spring Boot 入门

    一.Spring Boot 入门 1.Spring Boot 简介 简化Spring应用开发的一个框架: 整个Spring技术栈的一个大整合: J2EE开发的一站式解决方案: 2.微服务 2014,m ...

  5. Spring Boot 入门与实战笔记

    **一.**Spring Boot 入门 1.Spring Boot 简介 简化Spring应用开发的一个框架: 整个Spring技术栈的一个大整合: J2EE开发的一站式解决方案: 2.微服务 20 ...

  6. Spring Boot入门到牛X

    Spring Boot入门到牛X 1.Spring Boot 项目下载地址:https://download.csdn.net/download/weixin_39549656/10287664 1. ...

  7. Spring Social实现QQ社交登录、注册

    文章目录 OAuth2.0的认证流程示意图 第一章 OAuth协议简介 1.1 OAuth协议要解决的问题是什么 1.2 OAuth协议中的各种角色 1.3 OAuth协议运行的流程 1.3.1 授权 ...

  8. Spring Boot 入门笔记

    一.Spring Boot 入门 1.Spring Boot 简介 简化Spring应用开发的一个框架: 整个Spring技术栈的一个大整合: J2EE开发的一站式解决方案: 2.微服务 2014,m ...

  9. Spring Security入门到实践(一)HTTP Basic在Spring Security中的应用原理浅析

    一.Spring Security简介 打开Spring Security的官网,从其首页的预览上就可以看见如下文字: Spring Security is a powerful and highly ...

最新文章

  1. php 一致性hash,【转载】memcache分布式 [一致性hash算法] 的php实现
  2. 经济和信息化谋定研究-左晓栋:国家网络安全事件应急预案
  3. 四十七、Tableau地理可视化
  4. Python内存管理方式和垃圾回收算法解析
  5. Android 调用系统邮件,发送邮件到指定邮箱
  6. MVC中跳转到其他页面,并传参数
  7. @MapperScan和@ComponentScan的区别
  8. IDEA 忽略CSS错误
  9. OpenGL入门学习 课程 (三) 绘制几何图形的一些细节问题
  10. Balrum 汉化指引
  11. 条码打印机如何打印流水号
  12. 利用Powrshell 查看在2000万信息中看看自己在不在所谓的开房信息中!
  13. Teechart 的用法详解:在VC6.0 跟Visual Studio 2005及之后版本的区别
  14. extmail mysql数据库 重启_配置extmail过程详解 | 学步园
  15. 团队管理的一些基本要点
  16. 微信小程序引用Vant组件库message: 没有找到可以构建的 NPM 包,请确认需要参与构建的 npm 都在 `miniprogramRoot` 目录内...
  17. 解决pip装包报错ERROR: Cannot unistall ‘llvmlite‘. It is a distutils installed project and thus we cannot..
  18. python --eel开发桌面程序
  19. 怎么判断数字n是否为2的x次方,即2的幂次呢,比如2,4,8,16,32
  20. 美团Java面试题,java笔试题库微信公众号

热门文章

  1. mysql error 1045 的解决方法
  2. 如何用JS实现音乐播放、暂停
  3. api restful_HATEOAS的RESTful服务。 记录超媒体API
  4. java代码识别_识别Java中的代码气味
  5. go micro java_Java Micro Framework:您无法忽略的新趋势
  6. Eclipse系列的隐藏宝藏-2019年版
  7. 根据谁创建资源授权资源
  8. [MEGA DEAL]完整的Java捆绑包(96%折扣)
  9. apache.camel_Apache Camel 2.11发布
  10. 梦想成真…教学–专业的Java开发人员:工具和最佳实践