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

来源:互联网 发布:淘宝不按地址发货 编辑:程序博客网 时间:2024/05/18 00:09

之前在“新浪微博客户端开发第一步”时就碰到这问题,后来通过一个比较“另类”的方法暂时解决了。今天终于通过比较正规的方法,使用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(3030608522);
        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授权

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

原创粉丝点击