使用twitter4j的OAuth方式登录

2009年9月24日 10:02 查看评论(3) 分类:技术文章 Tags:

前两天想为推特中文圈添加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登陆成功");
评论

(必须)

(必须 不会被公开)

YuLei666 说:
2009年9月28日 12:15

正要研究这个。。正好

hzqtc 说:
2010年4月28日 17:09

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

gang 说:
2010年8月16日 16:38

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