spring social_Spring Social入门

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

但是,这只是可用服务数量的一部分:要查看此列表的大小,请访问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的原始配置具有更大的灵活性。

@Configuration

public 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 />

……代码看起来像这样:

@Controller

public class TwitterTimeLineController {



  private static final Logger logger = LoggerFactory.getLogger(TwitterTimeLineController.class);



  private final Twitter twitter;



  @Autowired

  public 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 HTML

    formatTweets(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 statemachine

    machine.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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值