清除 JavaFX WebView 中的 session/cache/cookie [英] Clear the session/cache/cookie in the JavaFX WebView

查看:31
本文介绍了清除 JavaFX WebView 中的 session/cache/cookie的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 Swing 对话框,它使用 JavaFX WebView 显示来自 Google 服务器的 oAuth 2.0 URL.

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

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();

        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() + "
" + value.getMessage() :
                                                    engine.getLocation() + "
Unexpected 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;
        }
    }
}

每次,我都会从 Google 获取以下 URL.我将使用 SimpleSwingBrowser 加载以下 URL.

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.

在我之后

  1. 在屏幕一成功登录.
  2. 与屏幕二一起呈现.
  3. 点击接受.
  4. 关闭网络浏览器对话框.
  5. 再次生成与第一次完全相同的 URL.
  6. 创建一个全新的 SimpleSwingBrowser 实例,以加载步骤
  7. 中生成的 URL
  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

我希望 Google 会再次向我展示 Screen One,因为这是一个新的浏览会话.然而,我第二次看到的是屏幕二.

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.

看起来,在WebView中存储了一些会话/缓存/cookie,即使它是一个全新的实例.

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.

如何清除WebView中的session/cache/cookie?

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

推荐答案

JavaFX WebView 的会话 cookie 存储在 java.net.CookieHandler 中.

Session cookies for JavaFX WebView are stored in java.net.CookieHandler.

要自行管理 cookie,请创建 java.net.CookieManager 的新实例:

To manage cookies on your own create new instance of java.net.CookieManager:

java.net.CookieManager manager = new java.net.CookieManager();

然后将其设置为默认值:

Then set it as default:

java.net.CookieHandler.setDefault(manager);

要清除 cookie,只需调用 removeAll 方法:

To clear cookies just call removeAll method:

manager.getCookieStore().removeAll();

或者只是创建 cookie 管理器的新实例并将其设置为默认值:

or just create new instance of cookie manager and set it as default:

java.net.CookieHandler.setDefault(new java.net.CookieManager());

这篇关于清除 JavaFX WebView 中的 session/cache/cookie的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆