spring social_Spring Social入门
spring social
本文以及接下来的几篇博客通过演示Spring Social的使用来了解整个社交场景,而我将从非常基础开始。
如果您看过Spring Social Samples,您会知道它们包含几个非常好的和完整的“ quickstart”应用程序。 一个用于Spring 3.0.x,另一个用于Spring3.1.x。 在研究这些应用程序时,令我印象深刻的是,您必须学习多少概念才能欣赏正在发生的事情。 这包括配置,外部授权,提要集成,凭证持久性等……大部分复杂性是由于您的用户需要登录其软件即服务(SaaS)帐户(例如Twitter,Facebook或QZone),以便您的应用程序可以访问其数据1 。 由于周围有大量的SaaS提供程序以及它们使用的授权协议数量不同,这使情况更加复杂。
因此,我认为我会尝试将所有这些分解为各个单独的组件,以说明如何构建有用的应用程序; 但是,我将从一些背景开始。
Spring的家伙们正确地认识到Internet上有如此众多的SaaS提供程序,他们永远无法为所有这些提供模块,因此他们将功能分为两部分,第一部分包括spring-social-core和spring-social-web模块,为每个SaaS提供程序提供基本的连接和授权代码。 提供所有这些听起来像是一项艰巨的任务,但是它的简化之处在于,要成为SaaS提供者,您需要实现所谓的OAuth协议 。 我还没有介绍OAuth的详细信息,但简而言之,OAuth协议执行了一个复杂的小操作,允许用户与您的应用程序共享其SaaS数据(即他们在Facebook等上拥有的内容),而无需用户分发他们的您的应用程序的凭据。 至少有三个版本:1.0、1.0a和2.0,并且SaaS提供程序可以自由实现自己喜欢的任何版本,通常会添加自己的专有功能。
此拆分的第二部分包括SaaS提供程序模块,这些模块知道如何与最低级别的各个服务提供程序服务器进行通信。 Spring的家伙目前提供 基本服务 ,西方世界是 Facebook , LinkedIn 和 Twitter 。 采用广泛的模块化方法的好处是,您还可以使用很多其他社区主导的模块:
- 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社交Tumblr
- 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的配置的更多信息,请查看:
- Spring的基于Java的依赖注入
- 更多基于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
spring social_Spring Social入门相关推荐
- spring social_Spring Social入门–第2部分
spring social 几周前,我写了一篇文章,展示了我认为可以使用Spring Social编写的最简单的应用程序. 该应用程序读取并显示了Twitter用户的公共数据,并被编写为Spring ...
- Spring Social入门–第2部分
几周前,我写了一篇文章,展示了我认为可以使用Spring Social编写的最简单的应用程序. 该应用程序读取并显示了Twitter用户的公共数据,并被编写为Spring Social和社交编码领域的 ...
- Spring Social入门
像我一样,无论是添加简单的Facebook"赞"按钮,一大堆"共享"按钮还是显示时间轴信息,您都不会注意到当前对应用程序"社交化"的热衷. ...
- Spring Cloud Eureka 入门 (三)服务消费者详解
2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! "真正的进步 ...
- Spring Data ElasticSearch入门案例
Spring Data ElasticSearch入门案例 创建maven工程elasticsearch_springdata 基于maven导入坐标 导入spring data elasticsea ...
- 微服务技术方案:Spring Cloud 从入门到实战
随着互联网技术的发展与不断创新,以及用户流量的不断增大,越来越多的企业项目面临大数据.高并发等问题,随之而来的就是通过分布式模型组建架构,微服务思想就集中体现了应用价值,2020 年的你还没有掌握微服 ...
- Spring Data Solr入门
Spring Data Solr是Spring Data项目的扩展,该项目旨在简化Apache Solr在Spring应用程序中的使用. 请注意,这不是Spring(数据)或Solr的简介. 我认为您 ...
- spring boot(一)入门
目录 spring boot(一)入门 一.简介 1.微服务的概念 2.什么是spring boot 3.快速入门 4.springboot的快捷部署 spring boot(一)入门 一.简介 1. ...
- Spring Cloud Eureka 入门 (二)服务提供者详解
2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! "优秀不是过 ...
最新文章
- .NET Core HttpClient请求异常思考
- Nginx 禁止部分 User-Agrent 访问
- Deeplearning4j 手写体数字识别
- Tensorflow Auto-encoder + VAE 实战
- JS 立即执行的函数表达式(function)写法
- python支持复数以及相关的运算吗_Python复数属性和方法运算操作示例
- LeetCode刷题——64. 最小路径和
- 1,python基础入门
- [NOIP2013 普及组 T1] 计数问题
- linux安装文泉驿字体,centos 安装文泉驿字体教程,centos文泉驿字体下载字体(URL:h...
- logcat日志分析
- 国内十家微交易平台,正规微交易平台排行榜
- 科技热点周刊|GitLab 上市、LinkedIn 中国停止运营、Visual Studio 2022 正式版将发布
- PHP简单实现MVC框架路由功能模式
- python制作pdf教程_学以致用:Python爬取廖大Python教程制作pdf!
- 无线AP 的频段(2.4GHZ or 5GHz)
- nodejs+ffmpeg视频转码
- 心形PCB补充一些小细节
- 生产用计算机房噪音应小于,计算机房建设标准.docx
- Linux网络 DHCP
热门文章
- 什么是G1垃圾回收算法
- Maven精选系列--发布jar包到Nexus私库
- java之StringBuider与StringBuffer
- Boostrap技能点整理之【网格系统】
- struts+hibernate+oracle+easyui实现lazyout组件的简单案例——Action的实现类
- JavaScript(笔记)
- 清洁代码_清洁单元测试
- java登录界面命令_Java命令行界面(第19部分):jClap
- java登录界面命令_Java命令行界面(第8部分):Argparse4j
- java 交替_Java 8:使用交替接口公开的类型安全地图生成器