读书人

只透过Java进行新浪微博Ouath2授权

发布时间: 2012-09-22 21:54:54 作者: rapoo

只通过Java进行新浪微博Ouath2授权

之前在“新浪微博客户端开发第一步”时就碰到这问题,后来通过一个比较“另类”的方法暂时解决了。今天终于通过比较正规的方法,使用Java程序直接获取到新浪微博Ouath2授权所需的code。进而获取到access_token…

PS:主要还是使用到DJ Native Swing。

运行图示:

只透过Java进行新浪微博Ouath2授权

代码如下:

import java.awt.BorderLayout;

import javax.swing.JDialog;
import javax.swing.SwingUtilities;

import weibo4j.Oauth;
import weibo4j.examples.oauth2.Log;
import weibo4j.http.AccessToken;
import weibo4j.model.WeiboException;

import chrriis.common.UIUtils;
import chrriis.dj.nativeswing.swtimpl.NativeInterface;
import chrriis.dj.nativeswing.swtimpl.components.JWebBrowser;
import chrriis.dj.nativeswing.swtimpl.components.WebBrowserAdapter;
import chrriis.dj.nativeswing.swtimpl.components.WebBrowserNavigationEvent;

/**
* OAuth2授权
* @author 蜗牛都知道
* @see <a href="http://binary.duapp.com/"></a>
*/
public class OAuthDialog {
private String accessToken;
private Oauth oauth = new Oauth();
private String lastURL;
public OAuthDialog() {
final JDialog dialog = new JDialog();
dialog.setTitle("授权");
dialog.setResizable(false);
dialog.setBounds(30, 30, 608, 522);
JWebBrowser webBrowser = new JWebBrowser();
webBrowser.setBarsVisible(false);
webBrowser.setButtonBarVisible(false);
webBrowser.setDefaultPopupMenuRegistered(false);
try {
lastURL = oauth.authorize("code");
webBrowser.navigate(lastURL);
} catch (WeiboException e) {
e.printStackTrace();
}
webBrowser.addWebBrowserListener(new WebBrowserAdapter() {
@Override
public void locationChanged(WebBrowserNavigationEvent arg0) {
String site = arg0.getWebBrowser().getResourceLocation();
if(lastURL.equals(site)){
return;
}
lastURL = site;
if(site != null){
dialog.dispose();
}
System.out.println(site);
String code = site.substring(site.lastIndexOf("code=") + 5);
accessToken = getAccessTokenByCode(code);
System.out.println(accessToken);
}

});
dialog.add(webBrowser, BorderLayout.CENTER);
dialog.setVisible(true);
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
}

private String getAccessTokenByCode(String code) {
Log.logInfo("code:" + code);
AccessToken accessToken = null;
try {
accessToken = oauth.getAccessTokenByCode(code);
} catch (WeiboException e) {
if (401 == e.getStatusCode()) {
Log.logInfo("Unableto get the access token.");
} else {
e.printStackTrace();
}
}
return accessToken.getAccessToken();

}

public String getAccessToken() {
return accessToken;
}
public static void main(String[] args){
NativeInterface.open();
UIUtils.setPreferredLookAndFeel();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new OAuthDialog();
}

});
NativeInterface.runEventPump();
}
}

记得导入包: DJNativeSwing-SWT.jar、DJNativeSwing.jar及swt-3.7M5-win32-win32-x86.jar

示例代码下载:只通过Java进行新浪微博Ouath2授权

原创作品,转载请注明出处:蜗牛都知道

读书人网 >编程

热点推荐