Spring Social入門

像我一樣,無論是添加簡單的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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372443.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372443.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372443.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

apache ajax 跨域訪問,Apache 實現AJAX跨域請求

當使用ajax跨域請求時&#xff0c;瀏覽器報錯&#xff1a;XmlHttpRequest error: Origin null is not allowed by Access-Control-Allow-Origin.肯定是跨域的問題&#xff0c;如果用jsonp或者pro更多&#xff1a;當使用ajax跨域請求時&#xff0c;瀏覽器報錯&#xff1a;XmlHtt…

14、數據庫

數據庫轉載于:https://www.cnblogs.com/quyong/p/6687924.html

EhCache復制:RMI與JGroups

最近&#xff0c;我正在研究一種需要復制緩存的產品。 緩存提供程序已經確定-EhCache&#xff0c;剩下的就是有關傳輸的問題。 哪一個是最佳選擇&#xff1f; 這里的最佳選擇是指性能更好的選擇。 僅在兩個可用傳輸之間進行了性能評估-JGroups和RMI&#xff0c;對其他傳輸不予考…

Oracle 監控語句整理(包括TOP SQL等)

希望能對大家有所幫助&#xff01; 很多時候大家想查看oracle數據庫中的sql語句執行情況&#xff0c;但是又不知道如何是好&#xff0c;今天在這里為大家提供一個sql語句&#xff0c;大家可以通過以下的sql語句查詢Oracle數據庫中Top Sql情況&#xff1a; 查詢結果可按照PCT、總…

服務器wifi無線放大器,一回家WiFi信號太弱?教你用兩毛錢制作信號放大器

原標題&#xff1a;一回家WiFi信號太弱&#xff1f;教你用兩毛錢制作信號放大器現在家家戶戶都有無線路由器&#xff0c;但是大部分人都還是早期的單天線產品&#xff0c;信號覆蓋范圍比較小&#xff0c;特別是穿墻性能不行。人在客廳WiFi信號還滿格&#xff0c;一到臥室就瞬間…

iOS開發 之 可穿戴設備 藍牙4.0 BLE 開發

1 前言 當前有越來越多的可穿戴設備使用了藍牙4.0 BLE&#xff08;Bluetooth Low Energy)。對于iOS開發而言&#xff0c;Apple之前專門推出CoreBluetooth的Framework來支持BLE的開發。對于硬件開發有了解的朋友應該知道&#xff0c;在之前使用低版本的藍牙的設備&#xff0c;要…

將Java服務公開為Web服務

本教程解決了開發人員面臨的最實際的情況。 大多數時候&#xff0c;我們可能需要將某些現有服務公開為Web服務。 在項目生命周期的不同階段可能會遇到這種情況。 如果這是初始階段&#xff0c;那么您幾乎是安全的&#xff0c;您可以為此做好充分的準備。 但是&#xff0c;將要發…

git服務器維護 備份,gitlab服務運維,備份與恢復 - 橙子檸檬's Blog

gitlab服務運維工作Gitlab-ctl 使用gitlab-ctl start #啟動服務gitlab-ctl stop #停止服務gitlab-ctl restart #重啟服務檢查服務的日志信息gitlab-ctl tail redis #檢查redis的日志gitlab-ctl tail postgresql #…

angular js實現開關效果

功能&#xff1a;實現點擊排序&#xff0c;再點擊排倒序。 實現方法如下 方法一&#xff1a;定義變量實現點擊切換true或false&#xff0c;代碼為&#xff1a; $scope.lidata [ {"name":"Terry","age":12}, {&qu…

使用TestNG的彈簧測試支持

TestNG是一個測試框架&#xff0c;旨在涵蓋所有類別的測試&#xff1a;單元&#xff0c;功能&#xff0c;端到端&#xff0c;集成等。 它包括許多功能&#xff0c;例如靈活的測試配置&#xff0c;對數據驅動測試的支持&#xff08;使用DataProvider&#xff09;&#xff0c;強大…

Entity Framework - 理清關系 - 基于外鍵關聯的單向一對一關系

注&#xff1a;本文針對的是 Entity Framework Code First 場景。 之前寫過三篇文章試圖理清Entity Framework中的一對一關系&#xff08;單相思&#xff08;單向一對一&#xff09;, 兩情相悅&#xff08;雙向一對一&#xff09;, 兩情相悅-續&#xff09;&#xff0c;但當時理…

微信社交小程序服務器,Day12-微信小程序實戰-交友小程序-搭建服務器與上傳文件到后端...

要搞一個小型的cms內容發布系統因為小程序上線之后&#xff0c;直接對數據庫進行操作的話&#xff0c;慧出問題的&#xff0c;所以一般都會做一個管理系統&#xff0c;讓工作人員通過這個管理系統來對這個數據庫進行增刪改查微信小程序其實給我們提供了這樣的能力了(也就是可以…

java go

熟練掌握java技術&#xff0c;對多線程、數據結構有清晰的認識&#xff1b; 熟悉MySQL/Oracle數據庫&#xff0c;熟悉關系數據庫應用設計開發&#xff1b; 熟悉Spring/MyBatis/Freemarker等一種或者多種框架&#xff1b; java基礎扎實&#xff0c;熟練掌握目前主流的開源框架&a…

了解如何解決OSGI捆綁包

我想回顧一下OSGI包如何解決并使用Apache Karaf進行演示。 Karaf是基于Apache Felix內核的功能齊全的OSGI容器&#xff0c;并且是Apache ServiceMix集成容器的基石。 對于第一部分&#xff0c;我將討論OSGI框架如何解決捆綁包。 在第二部分中&#xff0c;我將使用Apache Karaf演…

文件共享服務器imac,iMac怎么在網絡上共享設備windows文件夾和服務 | MOS86

本章通過向您展示如何在網絡和Mac和Windows計算機之間共享文件&#xff0c;文件夾和設備&#xff0c;幫助您充分利用您的iMac網絡連接。→使用Macs共享文件和文件夾使用AirDrop和文件共享→與Windows 7計算機共享文件→設置共享權限→使用共享表快速在線共享文件→共享和訪問網…

【轉】 簡單理解Socket

題外話 前幾天和朋友聊天&#xff0c;朋友問我怎么最近不寫博客了&#xff0c;一個是因為最近在忙著公司使用的一些控件的開發&#xff0c;瀏覽器兼容性搞死人&#xff1b;但主要是因為這段時間一直在看html5的東西&#xff0c;看到web socket時覺得很有意思&#xff0c;動手寫…

.NET基礎

.NET C# ASP.NET關系&#xff1a;.NET是一個平臺&#xff0c;提供程序運行的虛擬機環境和類庫。 C#是.Net平臺上的一種語言&#xff0c;其他語言還有VB.NET PowerShell等。 ASP.NET是在.NET下的網站開發技術。 安裝.NET FrameWork就可以運行。VS集成安裝了.NET FrameWork. 控制…

業務活動監視器(BAM)2.0帶來的革命

生產兼具精益和企業價值的中間件是一項艱巨的工作。 它要么不存在&#xff0c;要么需要創新的思維&#xff08;很多&#xff09;&#xff0c;并且需要在實現中反復進行。 業務風險很大&#xff0c;但是如果您做對了&#xff0c;它就會使您領先于其他任何公司。 這就是為什么我們…

oracle銷售服務器嗎,oracle 服務器 版本

oracle 服務器 版本 內容精選換一換Atlas 800 訓練服務器(型號 9010)安裝上架、服務器基礎參數配置、安裝操作系統等操作請參見《Atlas 800 訓練服務器 用戶指南 (型號9010)》。Atlas 800 訓練服務器(型號 9010)適配操作系統如表1所示。請參考表2下載驅動和固件包。Atlas 800 訓…

Vue組件間通信:一個例子學會Vue組件-Vue.js學習總結)(轉載)

詳情請點擊 http://www.jianshu.com/p/9ad1ba89a04b轉載于:https://www.cnblogs.com/zhongjiang/p/6694459.html