2013-03-23 22 views
1

我正在寫一個簡單的上傳文件的Java Dropbox程序。以下是我正在使用的特定代碼,它創建了與Dropbox帳戶的連接。下面的代碼僅在用戶第一次運行應用程序時運行。之後,AccessTokenPair被保存以供後續運行使用。如何明確確認用戶沒有睡覺或詢問用戶授權的Dropbox應用程序?

AppKeyPair appKeys = new AppKeyPair(APP_KEY, APP_SECRET); 
WebAuthSession session = new WebAuthSession(appKeys, ACCESS_TYPE); 
dropbox = new DropboxAPI<WebAuthSession>(session);  

try { 
    if (!STATE_FILE.exists()) { 
    STATE_FILE.createNewFile(); 
    WebAuthInfo authInfo = session.getAuthInfo(); 
    RequestTokenPair pair = authInfo.requestTokenPair; 
    String url = authInfo.url; 
    URI confirmAddress = new URI(url); 
    Desktop desktop = Desktop.getDesktop(); 
    desktop.browse(confirmAddress); 
    boolean authenticated = false; 
    while (!authenticated) { 
     try { 
      session.retrieveWebAccessToken(pair); 
      authenticated = true;   
     } catch (DropboxException dbe) { 
      io.tellUser("Waiting for user authentication..."); 
      Thread.sleep(4000); 

     } 
    } 

    AccessTokenPair tokens = session.getAccessTokenPair(); 
    State state = new State(STATE_FILE); 
    state.save(tokens); 

它似乎工作正常,但我對我檢查身份驗證的方式警惕。上面的代碼將在用戶的默認瀏覽器中打開一個鏈接到他/她的Dropbox帳戶,以允許訪問此應用程序。如果訪問權限未被允許,session.retrieveWebAccessToken(pair)將拋出DropboxException。所以程序基本上檢查並捕獲異常,然後一遍又一遍地睡覺,直到獲得訪問權限。我想找到一種方法來實現這一點,無需等待和檢查。我已經嘗試了一個自旋鎖/忙鎖,並要求用戶在授權此應用之後按下按鈕,除了上面實現的sleep()方法。我寧願不要求用戶進行干預。在閱讀了一些Dropbox API之後,我瞭解到在構建WebAuthInfo對象時可以使用回調URL,但我不確定如何使其工作,因爲我的應用程序不是Web應用程序。有沒有人有任何想法如何使用該回調爲我的目的或任何其他想法?

+1

http://stackoverflow.com/questions/1359689/how-to-send-http-request-in-java請問你有沒有什麼好的方法來使用你的java代碼中的HTTP連接?如果Dropbox登錄頁面可以預測,那麼您可以讓用戶在您的應用中輸入詳細信息,然後將其轉發到Dropbox。這是你所指的保管箱網址嗎? https://www.dropbox.com/developers/blog/20 – KyleM 2013-03-23 05:57:18

+0

我打開在我的代碼中使用HTTP連接。這是一個很好的Dropbox鏈接。我可能能夠通過我的網站進行路由。是的,網址的格式與鏈接上的格式相同。用戶在到達url進行授權後必須點擊按鈕。在我完全理解它的工作原理之前,這需要進行一些研究,但是謝謝你的提示。 – Guy 2013-03-23 06:44:58

+0

請注意,您永遠不應該處理用戶的登錄名/密碼信息:https://www.dropbox.com/developers/reference/bestpractice – Greg 2013-03-23 19:08:01

回答

0

除了顯示的try/wait方案外,還有其他一些方法可以處理這個流程。

最好,但最困難:在/ authorize上使用oauth_callback參數以及爲您的應用程序註冊的自定義URL方案。這會在授權後自動將用戶重定向到您的應用程序,您的應用程序可以檢測到該應用程序,然後恢復流程。否則,您可以等到用戶將「焦點」返回到您的應用,然後自動嘗試,或者讓他們告訴您的應用嘗試手動嘗試。

相關問題