javascript
spring social_Spring Social入门
spring social
像我一樣,無(wú)論是添加簡(jiǎn)單的Facebook“贊”按鈕,一大堆“共享”按鈕還是顯示時(shí)間軸信息,您都不會(huì)注意到當(dāng)前對(duì)應(yīng)用程序“社交化”的熱衷。 每個(gè)人都在做這件事,包括Spring的家伙,事實(shí)上,他們提出了一個(gè)叫做Spring Social的靈巧的API,可讓您將您的應(yīng)用程序與許多軟件即服務(wù)(SaaS)提要(例如Twitter, Facebook,LinkedIn等本文以及接下來(lái)的幾篇博客通過(guò)演示Spring Social的使用來(lái)了解整個(gè)社交場(chǎng)景,而我將從非?;A(chǔ)開(kāi)始。
如果您看過(guò)Spring Social Samples,您會(huì)知道它們包含幾個(gè)非常好的和完整的“ quickstart”應(yīng)用程序。 一個(gè)用于Spring 3.0.x,另一個(gè)用于Spring3.1.x。 在研究這些應(yīng)用程序時(shí),令我印象深刻的是,您必須學(xué)習(xí)多少概念才能欣賞正在發(fā)生的事情。 這包括配置,外部授權(quán),提要集成,憑證持久性等……大部分復(fù)雜性是由于您的用戶(hù)需要登錄其軟件即服務(wù)(SaaS)帳戶(hù)(例如Twitter,Facebook或QZone),以便您的應(yīng)用程序可以訪問(wèn)其數(shù)據(jù)1 。 由于周?chē)写罅康腟aaS提供程序以及它們使用的授權(quán)協(xié)議數(shù)量不同,這使情況更加復(fù)雜。
因此,我認(rèn)為我會(huì)嘗試將所有這些分解為各個(gè)單獨(dú)的組件,以說(shuō)明如何構(gòu)建有用的應(yīng)用程序; 但是,我將從一些背景開(kāi)始。
Spring的家伙們正確地認(rèn)識(shí)到Internet上有如此眾多的SaaS提供程序,他們永遠(yuǎn)無(wú)法為所有這些提供模塊,因此他們將功能分為兩部分,第一部分包括spring-social-core和spring-social-web模塊,為每個(gè)SaaS提供程序提供基本的連接和授權(quán)代碼。 提供所有這些聽(tīng)起來(lái)像是一項(xiàng)艱巨的任務(wù),但是它的簡(jiǎn)化之處在于,要成為SaaS提供者,您需要實(shí)現(xiàn)所謂的OAuth協(xié)議 。 我還沒(méi)有介紹OAuth的詳細(xì)信息,但簡(jiǎn)而言之,OAuth協(xié)議執(zhí)行了一個(gè)復(fù)雜的小操作,允許用戶(hù)與您的應(yīng)用程序共享其SaaS數(shù)據(jù)(即他們?cè)贔acebook等上擁有的內(nèi)容),而無(wú)需用戶(hù)分發(fā)他們的您的應(yīng)用程序的憑據(jù)。 至少有三個(gè)版本:1.0、1.0a和2.0,并且SaaS提供程序可以自由實(shí)現(xiàn)自己喜歡的任何版本,通常會(huì)添加自己的專(zhuān)有功能。
此拆分的第二部分包括SaaS提供程序模塊,這些模塊知道如何與最低級(jí)別的各個(gè)服務(wù)提供程序服務(wù)器進(jìn)行通信。 Spring的家伙目前提供 基本服務(wù) ,西方世界是 Facebook , LinkedIn 和 Twitter 。 采用廣泛的模塊化方法的好處是,您還可以使用很多其他社區(qū)主導(dǎo)的模塊:
- Spring社交500px
- Spring社交BitBucket
- Spring社交挖掘
- Spring社交保管箱
- Spring社交展
- Spring社交電影
- Spring社交四方
- Spring社交Google
- Spring社交Instagram
- Spring社交Last.fm
- Spring Social Live(Windows Live)
- Spring社會(huì)味iso
- Spring社交Mixcloud
- Spring社交Nk
- Spring社會(huì)銷(xiāo)售人員
- Spring社交SoundCloud
- Spring社交Tumblr
- Spring社交視頻
- Spring社交活動(dòng)
- Spring社交微博
- Spring社會(huì)興
- Spring社交Yammer
- Spring社會(huì)保障模塊
- Spring Social Grails插件
但是,這只是可用服務(wù)數(shù)量的一部分:要查看此列表的大小,請(qǐng)?jiān)L問(wèn)AddThis網(wǎng)站,并找出它們支持的服務(wù)。
返回代碼
現(xiàn)在,如果您像我一樣,那么當(dāng)涉及到編程時(shí),您會(huì)討厭安全性:從開(kāi)發(fā)角度來(lái)看,這非常麻煩,會(huì)阻止您編寫(xiě)代碼并使您的生活變得困難,所以我想我應(yīng)該開(kāi)始通過(guò)扔掉所有東西并編寫(xiě)一個(gè)顯示一些基本SaaS數(shù)據(jù)的小應(yīng)用程序。 事實(shí)證明,這可能是因?yàn)槟承㏒aaS提供商(例如Twitter)同時(shí)服務(wù)于私有數(shù)據(jù)和公共數(shù)據(jù)。 私有數(shù)據(jù)是您需要登錄的東西,而公共數(shù)據(jù)對(duì)任何人都可用。
在今天的場(chǎng)景中,我正在編寫(xiě)一個(gè)基本應(yīng)用程序,該應(yīng)用程序使用Spring Social Twitter Module在應(yīng)用程序中顯示Twitter用戶(hù)的時(shí)間線,而您要做的只是Twitter用戶(hù)的屏幕名稱(chēng)。
要?jiǎng)?chuàng)建該應(yīng)用程序,第一步是使用SpringSource Toolkit儀表板的模板部分創(chuàng)建一個(gè)基本的Spring MVC項(xiàng)目。 這提供了一個(gè)Web應(yīng)用程序,可幫助您入門(mén)。
第二步是將以下依賴(lài)項(xiàng)添加到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>上面的第一個(gè)依賴(lài)關(guān)系是針對(duì)Spring Social的Twitter API的,而第二個(gè)依賴(lài)關(guān)系是使用Spring 3的@Configuration注釋配置應(yīng)用程序所必需的。 請(qǐng)注意,您還需要通過(guò)添加以下內(nèi)容來(lái)指定Twitter API版本號(hào):
<org.springframework.social-twitter-version>1.0.2.RELEASE</org.springframework.social-twitter-version>…到文件頂部的<properties>部分。
步驟3是您需要配置Spring的地方。 如果查看Spring Social示例代碼,您會(huì)注意到Spring的家伙使用Java和Spring 3 @Configuration注釋配置他們的應(yīng)用程序。 這是因?yàn)榛贘ava的配置比基于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;}}上面的代碼所做的全部就是通過(guò)Spring的Twitter接口為Spring提供一個(gè)簡(jiǎn)單的TwitterTemplate對(duì)象。 對(duì)于這個(gè)基本應(yīng)用程序,使用@Configuration絕對(duì)是多余的,但是我將在以后的博客中繼續(xù)使用它。
有關(guān)@Configuration批注和基于Java的配置的更多信息,請(qǐng)查看:
編寫(xiě)完配置類(lèi)后,接下來(lái)要做的就是整理控制器。 在這個(gè)簡(jiǎn)單的示例中,我使用了一個(gè)簡(jiǎn)單的@RequestMapping處理程序,該處理程序處理如下所示的URL:
<a href=timeline?id=roghughe>Grab Twitter User Time Line for @roghughe</a><br />……代碼看起來(lái)像這樣:
@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方法包含三個(gè)步驟:首先,它包含一些推文,進(jìn)行一些格式化,然后將結(jié)果放入模型中。 對(duì)于此博客,最重要的一點(diǎn)是掌握推文,您可以看到這是通過(guò)List <tweet> queryForTweets(String screenName)方法完成的。 此方法有兩個(gè)步驟:使用Twitter對(duì)象獲取TimelineOperations實(shí)例,然后使用該對(duì)象使用屏幕名稱(chēng)作為參數(shù)來(lái)查詢(xún)時(shí)間線。
如果您查看Twitter界面,它將充當(dāng)工廠對(duì)象,并返回其他對(duì)象來(lái)處理不同的Twitter功能:時(shí)間軸,直接消息傳遞,搜索等。我想這是因?yàn)殚_(kāi)發(fā)人員意識(shí)到Twitter本身包含了如此多的功能,如果所有必需的方法都在一個(gè)類(lèi)中,然后他們手上會(huì)有一個(gè)上帝對(duì)象 。
我還包括了將Tweets轉(zhuǎn)換為HTML的可選步驟。 為此,我使用了State Machine項(xiàng)目和博客中的JAR,您可以在formatTweets(...)方法中查看其工作方式。
將Tweet的列表作為屬性放入模型后,要完成的最后一件事情是編寫(xiě)一個(gè)JSP來(lái)顯示數(shù)據(jù):
<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>如果您實(shí)現(xiàn)了可選的錨標(biāo)記格式,那么這里要記住的關(guān)鍵是確保瀏覽器能夠獲取格式化的TweetHTML。 這可以通過(guò)使用c:out標(biāo)記的escapeXml ='false'屬性或?qū)? {tweet.text}直接放入JSP中來(lái)實(shí)現(xiàn)。
在此示例中,我沒(méi)有包含任何樣式或花哨的前端,因此,如果您運(yùn)行代碼2 ,則應(yīng)獲得以下內(nèi)容:
這就完成了我對(duì)Spring Social的簡(jiǎn)單介紹,但是仍然有很多基礎(chǔ)。 在我的下一個(gè)博客中,我將了解背景情況。
1我猜想這里有很多隱私和數(shù)據(jù)保護(hù)合法性問(wèn)題要考慮,尤其是如果您使用此API存儲(chǔ)用戶(hù)數(shù)據(jù)時(shí),我希望對(duì)此發(fā)表評(píng)論和意見(jiàn)。
2該代碼可在GitHub上的git項(xiàng)目中的git://github.com/roghughe/captaindebug.git上找到。
參考:來(lái)自Captain Debug博客博客的JCG合作伙伴 Roger Hughes的Spring Social入門(mén) 。
翻譯自: https://www.javacodegeeks.com/2012/06/getting-started-with-spring-social.html
spring social
總結(jié)
以上是生活随笔為你收集整理的spring social_Spring Social入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 宠物小精灵黄版电脑版隆隆石怎么进化隆隆岩
- 下一篇: 部署微服务– Spring Boot f