配置spring-social通过代理工作

时间:2015-01-19 12:16:44

标签: java spring proxy spring-social

我尝试使用spring-social模块运行app。但是当建立与twitter的连接时,我有一个例外:

org.springframework.web.client.ResourceAccessException: I/O error on POST request for "https://api.twitter.com/oauth/request_token": Connection refused; nested exception is java.net.ConnectException: Connection refused

我知道这是因为代理,如果它在没有代理的另一台计算机上运行,​​它的工作正常。声明代理参数的方法如:

System.setProperty( "http.proxyPort", "8090" );
System.setProperty( "https.proxyPort", "8090" );
System.setProperty( "http.proxyHost", "192.168.1.50" );
System.setProperty( "https.proxyHost", "192.168.1.50" );

或在开始时传递VM参数:

-Dhttp.proxySet=true -Dhttp.proxyHost=192.168.1.50 -Dhttp.proxyPort=8090 -Dhttps.proxyHost=192.168.1.50 -Dhttps.proxyPort=8090

不行。它只有在我使用spring-social + spring-boot时才有用。据我所知,spring-boot可以使用代理设置初始化内部RestTemplate(在Twitter.class中)。

实际上问题是:如果在应用程序中没有使用spring boot,如何初始化spring-social以使用代理? THX。

1 个答案:

答案 0 :(得分:1)

非常愚蠢的错误耗费了数小时。可能对某人有帮助。要配置spring-social所需的配置类,例如:

@Configuration
@EnableSocial
public class SocialConfig
    extends SocialConfigurerAdapter
{
...
}

有许多方法,其中一种是

@Override
public void addConnectionFactories( ConnectionFactoryConfigurer cfConfig)
{
    TwitterConnectionFactory twitterConnectionFactory = new TwitterConnectionFactory( "twitter.appId", "twitter.appSecret" );
    cfConfig.addConnectionFactory( twitterConnectionFactory );
}

在此方法中创建TwitterConnectionFactory ...并且它包含RestTemplate,它向twitter发送请求。因此,System代理属性的设置应该在工厂创建之前。所以最简单的情况是:

@Override
public void addConnectionFactories( ConnectionFactoryConfigurer cfConfig )
{    
    System.setProperty( "http.proxyPort", "8090" );
    System.setProperty( "https.proxyPort", "8090" );
    System.setProperty( "http.proxyHost", "192.168.1.50" );
    System.setProperty( "https.proxyHost", "192.168.1.50" );
    TwitterConnectionFactory twitterConnectionFactory = new TwitterConnectionFactory( "twitter.appId", "twitter.appSecret" );
    cfConfig.addConnectionFactory( twitterConnectionFactory );
}

不幸的是,我稍后设置了这个属性:(