2015-12-13 3 views
0

Я работаю над небольшим приложением JavaFX, целью которого является открыть веб-страницу аутентификации Pushbullet, чтобы получить токен доступа OAuth. Запись в JavaFX была очень простой. Однако, когда я заполняю форму и проверяю ее с помощью учетной записи Google, аутентификация завершается с ошибкой. Поскольку то же самое работает, когда я открываю URL-адрес в моем родном браузере Chrome, я думаю, что проблема связана с ограниченными возможностями реализации JavaFX WebEngine, но я не могу понять, что это такое.Проверка подлинности JavaEX WebEngine и Pushbullet

Ниже приведен фрагмент кода, который я использовал:

import javafx.application.Application; 
import javafx.geometry.Rectangle2D; 
import javafx.scene.Scene; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.web.WebEngine; 
import javafx.scene.web.WebView; 
import javafx.stage.Screen; 
import javafx.stage.Stage; 

public class GraphicalAuthorizationHelper extends Application { 

    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(final Stage stage) throws Exception { 
     BorderPane borderPane = new BorderPane(); 

     WebView browser = new WebView(); 
     WebEngine webEngine = browser.getEngine(); 

     borderPane.setCenter(browser); 
     webEngine.documentProperty().addListener((prop, oldDoc, newDoc) -> { 
      //enableFirebug(webEngine); 
     }); 

     String url = "https://www.pushbullet.com/authorize?client_id=hjT07gVHUYnzN1iVlWIFU7K1Sxype0bf&redirect_uri=http://oauth.yfiton.com/callback&response_type=token"; 

     webEngine.load(url); 

     Rectangle2D primaryScreenBounds = Screen.getPrimary().getVisualBounds(); 

     Scene scene = new Scene(
       borderPane, 
       primaryScreenBounds.getWidth() * 0.55, 
       primaryScreenBounds.getHeight() * 0.65); 

     stage.setScene(scene); 
     stage.show(); 
    } 

    private static void enableFirebug(final WebEngine engine) { 
     engine.executeScript("if (!document.getElementById('FirebugLite')){E = document['createElement' + 'NS'] && document.documentElement.namespaceURI;E = E ? document['createElement' + 'NS'](E, 'script') : document['createElement']('script');E['setAttribute']('id', 'FirebugLite');E['setAttribute']('src', 'https://getfirebug.com/' + 'firebug-lite.js' + '#startOpened');E['setAttribute']('FirebugLite', '4');(document['getElementsByTagName']('head')[0] || document['getElementsByTagName']('body')[0]).appendChild(E);E = new Image;E['setAttribute']('src', 'https://getfirebug.com/' + '#startOpened');}"); 
    } 

} 

Я заметил, что код может быть использован для получения маркеров доступа OAuth для Twitter или отнимите с успехом, но не с Pushbullet механизмом аутентификации. Когда форма отправлена, я получаю ошибку подписание Ошибки в свой аккаунт: не удалось подключиться к серверу:

Pushbullet authentication error

Я послал по электронной почте Pushbullet команды около двух недель назад, но я не получил никакого ответа , В то же время, я пытался использовать поджигатель, чтобы понять, что может быть проблемой, но без успеха:

enter image description here

Любая идея, комментарий и т.д. приветствуется.

+1

У вас есть локальное хранилище? Сайт требует этого, и это самая распространенная ошибка, которую мы видим. –

+0

@ChrisPushbullet Спасибо за комментарий. К сожалению, проблема, похоже, не связана с локальным хранилищем. Я использую Java 8, и в документации говорится, что локальная память реализована с помощью этой версии Java. Я также проверил этот факт, изменив значение переменной _url_ (в куске кода, вышедшем выше), на '' http://html5demos.com/storage'', – Laurent

+1

Я спросил у парня, который сделал эту страницу, и ошибка «не могла подключиться к серверу», похоже, означает именно это. Таким образом, запрос на сервер не удался, возможно, вы можете посмотреть на сетевого инспектора в firebug, чтобы выяснить, почему это так. У меня есть случайная теория, что это может быть связано с CORS. API находится на api.pushbullet.com, который является другим доменом, и поэтому CORS должен работать, прежде чем он сможет делать запросы. –

ответ

1

Как предложил Крис Pushbullet, вопрос был связан с CORS. Мне удалось решить эту проблему, установив свойство Java sun.net.http.allowRestrictedHeaders на true на JVM, которая запускает экземпляр JavaFX WebEngine.

Смежные вопросы