使用twitter4j的OAuth方式登录

2009-9-24

前两天想为推特中文圈添加OAuth登陆的功能,因为我整个站用的是twitter4j,所以必须得用twitter4j提供的方法去进行 OAuth登陆,但是twitter4j官方站的例子实在太诡异了,而且是针对java应用程序的例子而不是J2EE的例子,看了半天都没法把它转到 J2EE上来,网上搜了挺久也没有相关教程可以模仿,OAuth方式登录实在是够迷惑人的,两种tonke很容易就混了,源代码也很复杂看不懂,实在是折腾死人,但最终还是折腾出来了,虽然可能做twitter应用的人不多,用twitter4j做twitter应用的人更不多,但还是分享下 twitter4j的OAuth登陆方法吧。我也不太懂里面的运行原理,只把我的用法写出来。

初始页面:

Twitter twitter = new Twitter();

//OAuth有两种Token,分别是RequestToken和AccessTonke。
//通过OAuth Consumer的key和secret就可以获取RequestTokenKey和RequestTokenSecret:
twitter.setOAuthConsumer( "[your consumer key] ",  "[your consumer secret] ");
RequestToken requestToken = twitter.getOAuthRequestToken();

String token = requestToken.getToken();
String tokenSecret = requestToken.getTokenSecret();

//先保存两个requestToken
Utility.setCookie( "tonke ",token,false,response);
Utility.setCookie( "tokenSecret ",tokenSecret,false,response);

//跳转到Twitter OAuth验证页面
response.sendRedirect(requestToken.getAuthorizationURL());

另一个页面上,也就是Twitter OAuth认证后返回的页面:

Twitter twitter = new Twitter();
twitter.setOAuthConsumer( "[your consumer key] ",  "[your consumer secret] ");

//获取之前保存的requestTokenKey和requestTokenSecret
String token = Utility.getCookie( "tonke ", request);
String tokenSecret = Utility.getCookie( "tokenSecret ", request);

//通过requestTokenKey和requestTokenSecret获得accessToken,包含了accessTokenKey和accessTokenSecret
AccessToken accessToken = twitter.getOAuthAccessToken(token, tokenSecret);
//把accessToken给twitter,twitter这个实例就算登陆了,效果等同于twitter = new twitter( "name ", "password ")
twitter.setOAuthAccessToken(accessToken);

//在这里就可以updateStatus了
twitter.updateStatus( "OAuth登陆成功 ");

//把accessTokenKey和accessTokenSecret保存起来,下次就不用再验证了
Utility.setCookie( "accessToken ",accessToken.getToken(), true, response);
Utility.setCookie( "accessTokenSecret ", accessToken.getTokenSecret(), true,response);

在其他页面上,只要把之前保存的accessTokenKey和accessTokenSecret传给twitter就行了:

twitter = new Twitter();
twitter.setOAuthConsumer(ConsumerKey, ConsumerScret);
AccessToken accessToken = new AccessToken(Utility.getCookie( "accessToken ", request), Utility.getCookie( "accessTokenSecret ", request));
twitter.setOAuthAccessToken(accessToken);
twitter.updateStatus( "OAuth登陆成功 ");
评论

*

*

2009年9月28日 12:15

正要研究这个。。正好

2010年4月28日 17:09

深有同感,看了你这篇文章我就少走弯路了,多谢!

2010年8月16日 16:38

我有一个新浪的客户端,现在用OAuth和普通登陆共存,但是OAuth登陆每次都要去新浪网页上授权,能否做到保存授权下次自动登陆呢,第一次接触OAuth,请多指教

2010年12月4日 22:58

说点什么好。。。
满屏幕的“" &quot”叫人怎么看代码。。。
既然写出来了,最好格式还是调清楚一下比较好,是吧。

2010年12月4日 23:00

@gang
>我有一个新浪的客户端,现在用OAuth和普通登陆共存,但是OAuth登陆每次都要去新浪网页上授权,
>能否做到保存授权下次自动登陆呢,第一次接触 OAuth,请多指教

不需要每次。第一次取得后把accessTokenSecret和consumerKey 存在服务器上就可以了。

2010年12月5日 11:43

@陌上清溪 看来是迁移博客的时候出了问题

2012年1月3日 13:48

你好,我最近在开发Facebook和twitter的应用程序,请问通常twitter常用的Java sdk是twitter4j吗?还有其他更好的吗?初来乍到,多多指教

2013年5月7日 10:50

非常难得的帖子,感谢博主分享,另外对 @sea salt 有同问,想对Facebook和twitter的应用有更多的了解