Skip to Main Content

Java SE (Java Platform, Standard Edition)

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Clear the session/cache/cookie in the JavaFX WebView

yccheokMay 1 2014

I had a Swing dialog, which uses JavaFX WebView to display oAuth 2.0 URL from Google server.


Everytime, I will get the following URL from Google. I will use the SimpleSwingBrowser to load the following URL.

https://accounts.google.com/o/oauth2/auth?client_id=xxx&redirect_uri=http://localhost:55780/Callback&response_type=code&scope=email%20https://www.googleapis.com/auth/drive.appdata%20profile

During the first time, the following UI will be shown.

Screen One

enter image description here

Screen Two

enter image description here

After I

  1. Perform success login at Screen One.
  2. Presented with Screen Two.
  3. Click on Accept.
  4. Close the web browser dialog.
  5. Again, generate the exact same URL as first time.
  6. Create a completely new instance of SimpleSwingBrowser, to load URL generated at step

I expect Google will show me Screen One again, as this is a new browsing session. However, what I'm getting for the 2nd time, is Screen Two.

It seems that, there are some stored session/cache/cookie in the WebView, even though it is a completely new instance.

I expect I will get myself back to Screen One, so that I can support multiple user accounts.

How can I clear the session/cache/cookie in the WebView?

Here's the complete source code (I cross post this question at java - Clear the session/cache/cookie in the JavaFX WebView - Stack Overflow)

public class SimpleSwingBrowser extends JDialog {

    private final JFXPanel jfxPanel = new JFXPanel();

    private WebEngine engine;

    private final JPanel panel = new JPanel(new BorderLayout());

    public SimpleSwingBrowser() {

        super(MainFrame.getInstance(), JDialog.ModalityType.APPLICATION_MODAL);

        initComponents();

    }

   

    private void initComponents() {

        createScene();

 

        // http://stackoverflow.com/questions/11269632/javafx-hmtleditor-doesnt-react-on-return-key

        jfxPanel.addKeyListener(new KeyAdapter() {

            @Override

            public void keyTyped(KeyEvent e) {

                if (e.getKeyChar() == 10) {

                    e.setKeyChar((char) 13);

                    Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(e);

                }

            }

        });

        panel.add(jfxPanel, BorderLayout.CENTER);

       

        getContentPane().add(panel);

       

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();

        setBounds((screenSize.width-460)/2, (screenSize.height-680)/2, 460, 680);

    }

   

    private void createScene() {

        Platform.runLater(new Runnable() {

            @Override

            public void run() {

                final WebView view = new WebView();

                engine = view.getEngine();

                engine.titleProperty().addListener(new ChangeListener<String>() {

                    @Override

                    public void changed(ObservableValue<? extends String> observable, String oldValue, final String newValue) {

                        SwingUtilities.invokeLater(new Runnable() {

                            @Override

                            public void run() {

                                SimpleSwingBrowser.this.setTitle(newValue);

                            }

                        });

                    }

                });

                engine.getLoadWorker()

                        .exceptionProperty()

                        .addListener(new ChangeListener<Throwable>() {

                            public void changed(ObservableValue<? extends Throwable> o, Throwable old, final Throwable value) {

                                if (engine.getLoadWorker().getState() == FAILED) {

                                    SwingUtilities.invokeLater(new Runnable() {

                                        @Override public void run() {

                                            JOptionPane.showMessageDialog(

                                                    panel,

                                                    (value != null) ?

                                                    engine.getLocation() + "\n" + value.getMessage() :

                                                    engine.getLocation() + "\nUnexpected error.",

                                                    "Loading error...",

                                                    JOptionPane.ERROR_MESSAGE);

                                        }

                                    });

                                }

                            }

                        });

               

                // http://stackoverflow.com/questions/11206942/how-to-hide-scrollbars-in-the-javafx-webview

                // hide webview scrollbars whenever they appear.

                view.getChildrenUnmodifiable().addListener(new ListChangeListener<Node>() {

                    @Override

                    public void onChanged(Change<? extends Node> change) {

                        Set<Node> deadSeaScrolls = view.lookupAll(".scroll-bar");

                        for (Node scroll : deadSeaScrolls) {

                            scroll.setVisible(false);

                        }

                    }

                });

               

                jfxPanel.setScene(new Scene(view));

            }

        });

    }

    public void loadURL(final String url) {

        Platform.runLater(new Runnable() {

            @Override

            public void run() {

                String tmp = toURL(url);

               

                if (tmp == null) {

                    tmp = toURL("http://" + url);

                }

                engine.load(tmp);

            }

        });

    }

    private static String toURL(String str) {

        try {

            return new URL(str).toExternalForm();

        } catch (MalformedURLException exception) {

                return null;

        }

    }

}

Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on May 29 2014
Added on May 1 2014
0 comments
2,644 views