我正在用 Java 编写一个简单的 Dropbox 程序来上传文件。这是我正在使用的特定代码,它创建了与 Dropbox 帐户的连接。下面的代码仅在用户第一次运行应用程序时运行。之后,将AccessTokenPair
保存以供后续运行使用。
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
if 访问未被允许。所以程序基本上检查并捕获异常,然后一遍又一遍地休眠,直到被授予访问权限。我想找到一种无需等待和检查即可完成此任务的方法。除了上面实现的方法之外,我还尝试了自旋锁/忙锁并要求用户在授权此应用程序后按下按钮sleep()
。我宁愿不要求用户干预。在阅读了一些 Dropbox API 之后,我了解到在构造WebAuthInfo
反对,但我不确定如何使它工作,因为我的应用程序不是网络应用程序。有谁知道如何将该回调用于我的目的或任何其他想法?