spring pom设置_Spring社交Twitter设置

spring pom设置

本系列第一部分中 ,我们研究了如何使用StackExchange REST API来检索其主要问题。 第二部分将重点设置使用Spring Social Twitter项目与Twitter REST API交互所需的支持。 最终目标是能够在多个帐户上每天发送两个问题,每个帐户集中讨论一个主题。

1.使用Spring Social Twitter

使用Spring Social Twitter项目所需的必需依赖项很简单。 首先,我们定义spring-social-twitter本身:

<dependency>
   <groupId>org.springframework.social</groupId>
   <artifactId>spring-social-twitter</artifactId>
   <version>1.0.3.RELEASE</version>
</dependency>

然后,我们需要使用更多最新版本覆盖其中的某些依赖项:

<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-core</artifactId>
   <version>3.2.2.RELEASE</version>
</dependency>
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-web</artifactId>
   <version>3.2.2.RELEASE</version>
</dependency>
<dependency>
   <artifactId>jackson-mapper-asl</artifactId>
   <groupId>org.codehaus.jackson</groupId>
   <version>1.9.12</version>
</dependency>

spring-social-twitterspring-corespring-web都定义为依赖项,但旧版本分别为3.0.7.RELEASE3.1.0.RELEASE 。 在我们自己的pom中覆盖它们可以确保项目使用的是我们定义的最新版本,而不是这些较旧的继承版本。

2.创建一个Twitter应用程序

这个用例-用个人帐户而不是其他用户帐户发推文,很简单。 如果应用程序需要在其每个Twitter帐户上为多个用户发推文,它很简单,这使我们可以省去大多数OAuth编排 。 因此,对于我们的用例,我们将直接创建TwitterTemplate ,因为我们可以手动设置所需的一切。 我们需要的第一件事是一个开发应用程序 –登录后可以在此处创建一个应用程序。创建该应用程序后,我们将具有“ 消费者密钥”和“ 消费者秘密” –这些是从“应用程序”页面获得的–在“ 详细信息”选项卡上的“ OAuth设置 。 另外,为了允许应用程序在该帐户上鸣叫,必须将“ 读取和写入访问”设置为替换默认的“ 只读”特权。

3.设置一个

接下来, TwitterTemplate需要提供访问令牌访问令牌密钥 。 也可以从“应用程序”页面(在“ 详细信息”选项卡下,“ 创建我的访问令牌”)生成这些密码 。 然后,可以从OAuth工具标签下检索访问令牌和密钥。 始终可以通过“ 重新创建我的访问令牌”操作在“ 详细信息”选项卡上重新生成新的。 至此,我们拥有了所需的一切-使用者密钥和使用者密钥,以及访问令牌和访问令牌密钥-这意味着我们可以继续为该应用程序创建TwitterTemplate

new TwitterTemplate(consumerKey, consumerSecret, accessToken, accessTokenSecret);

4.每个帐户一个模板

现在,我们已经了解了如何为单个帐户创建一个TwitterTemplate ,我们可以再次回顾一下用例-我们需要在多个帐户上发推文-这意味着我们需要多个TwitterTemplate实例。 可以使用简单的机制根据要求轻松创建它们:

@Component
public class TwitterTemplateCreator {
   @Autowired
   private Environment env;
   //
   public Twitter getTwitterTemplate(String accountName) {
      String consumerKey = env.getProperty(accountName + ".consumerKey");
      String consumerSecret = env.getProperty(accountName + ".consumerSecret");
      String accessToken = env.getProperty(accountName + ".accessToken");
      String accessTokenSecret = env.getProperty(accountName + ".accessTokenSecret");
      Preconditions.checkNotNull(consumerKey);
      Preconditions.checkNotNull(consumerSecret);
      Preconditions.checkNotNull(accessToken);
      Preconditions.checkNotNull(accessTokenSecret);
      //
      TwitterTemplate twitterTemplate =
         new TwitterTemplate(consumerKey, consumerSecret, accessToken, accessTokenSecret);
      return twitterTemplate;
   }
}

当然,这四个安全工件是按属性外部化到属性文件中的; 例如,对于SpringAtSO帐户

SpringAtSO.consumerKey=nqYezCjxkHabaX6cdte12g
SpringAtSO.consumerSecret=7REmgFW4SnVWpD4EV5Zy9wB2ZEMM9WKxTaZwrgX3i4A
SpringAtSO.accessToken=1197830142-t44T7vwgmOnue8EoAxI1cDyDAEBAvple80s1SQ3
SpringAtSO.accessTokenSecret=ZIpghEJgFGNGQZzDFBT5TgsyeqDKY2zQmYsounPafE

这实现了灵活性和安全性的良好结合-安全凭证不是代码库的一部分(它是开源的 ),而是独立存在于文件系统上,并由Spring拾取并通过简单的配置在Spring Enviroment中可用:

@Configuration
@PropertySource({ "file:///opt/stack/twitter.properties" })
public class TwitterConfig {
    //
}

Spring的属性是之前已经讨论过的主题,因此在此我们将不进一步讨论该主题。 最后, 测试将验证一个帐户是否具有在Spring Environment中容易获得的必要安全信息; 如果属性不存在,则getTwitterTemplate逻辑应通过NullPointerException测试失败:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { TwitterConfig.class })
public class TwitterTemplateCreatorIntegrationTest {
   @Autowired
   private TwitterTemplateCreator twitterTemplateCreator;
   //
   @Test
   public void givenValidAccountSpringAtSO_whenRetrievingTwitterClient_thenNoException() {
      twitterTemplateCreator.getTwitterTemplate(SimpleTwitterAccount.SpringAtSO.name());
   }
}

5.鸣叫

随着TwitterTemplate创造,让我们来看啁啾的实际行动。 为此,我们将使用一个非常简单的服务,接受一个TwitterTemplate并使用其底层API创建一条推文:

@Service
public class TwitterService {
   private Logger logger = LoggerFactory.getLogger(getClass());
   //
   public void tweet(Twitter twitter, String tweetText) {
      try {
         twitter.timelineOperations().updateStatus(tweetText);
      } catch (RuntimeException ex) {
         logger.error("Unable to tweet" + tweetText, ex);
      }
   }
}

6.测试

最后,我们可以编写一个集成测试来执行为帐户配置TwitterTemplate并在该帐户上发布Twitter的整个过程:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { TwitterConfig.class })
public class TweetServiceLiveTest {
   @Autowired
   private TwitterService twitterService;
   @Autowired
   private TwitterTemplateCreator twitterCreator;
   //
   // tests
   @Test
   public void whenTweeting_thenNoExceptions() {
      Twitter twitterTemplate = twitterCreator.getTwitterTemplate("SpringAtSO");
      twitterService.tweet(twitterTemplate, "First Tweet");
   }
}

7.结论

在这一点上,我们创建的Twitter API与StackExchange API完全分开,可以独立于该特定用例使用,以进行任何鸣叫。 从Stack Exchange帐户发布问题时,下一步的逻辑步骤是创建一个组件–与我们到目前为止介绍的Twitter和StackExchange API交互–这将是本系列下一篇文章的重点。

参考:来自bakgung博客的JCG合作伙伴 Eugen Paraschiv的Spring Social Twitter设置

翻译自: https://www.javacodegeeks.com/2013/04/spring-social-twitter-setup.html

spring pom设置

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值