只通过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 ( 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授权

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

你可能感兴趣的:(java,新浪微博,swing,null,Access,WebBrowser)