只通过Java进行新浪微博Ouath2授权
来源:互联网 发布:淘宝不按地址发货 编辑:程序博客网 时间:2024/05/18 00:09
之前在“新浪微博客户端开发第一步”时就碰到这问题,后来通过一个比较“另类”的方法暂时解决了。今天终于通过比较正规的方法,使用Java程序直接获取到新浪微博Ouath2授权所需的code。进而获取到access_token…
PS:主要还是使用到DJ Native Swing。
运行图示:
代码如下:
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();
}
}
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授权
原创作品,转载请注明出处:蜗牛都知道
- 只通过Java进行新浪微博Ouath2授权
- 新浪微博授权
- 新浪微博授权
- 新浪微博OAuth2授权
- IOS-新浪微博授权
- IOS-新浪微博授权
- 新浪微博授权步骤
- 新浪微博授权demo
- 新浪微博授权登录
- 新浪微博授权登录
- 新浪微博OAuth授权的Java实现
- #warning: 尚未配置新浪微博URL Scheme:, 无法使用SSO授权, 将以Web方式进行授权。
- android使用新浪微博最新SDK4.1进行第三方授权登录
- 新浪微博授权机制说明
- 新浪微博开发OAuth授权注意事项
- Android新浪微博OAuth授权认证
- 新浪微博授权时候会白屏
- 新浪微博 自动用户授权
- C语言指针和数组理解
- C# winForm程序开机启动和托盘显示
- 解决ASP防SQL注入攻击程序问题
- shell 凯撒加密(位移)算法
- RHEL6 的RHCE考试
- 只通过Java进行新浪微博Ouath2授权
- 计算12345678901×98765432101的积
- 第二周 任务八 输入10个数存入数组,求最大值、最小值和平均值
- 男人与女人,理想与现实,感性与理性
- 读《任正非在2012实验室的讲话》总结
- iPhone开发--Unresolved Symbols CAKeyframeAnimation : iOS Animation
- 用1、2、2、3、4、5这六个数字,写一个main函数,打印出所有不同的排列, 如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连.
- Lucene学习总结-索引
- 【双向链表】 hdu4286 Data Handler