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

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

问题描述

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

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() + "\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;
        }
    }
}

每次,我都会得到来自Google的以下网址。我将使用 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. 提交wi屏幕二。

  3. 点击接受。

  4. 关闭网络浏览器对话框。

  5. 再次,生成与第一次完全相同的URL。

  6. 创建一个全新的 SimpleSwingBrowser 实例,以加载在步骤生成的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,因为这是一个新的浏览会话。但是,我第二次得到的是Screen Two。

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.

似乎在<$ c $中有一些存储的会话/缓存/ cookie c> WebView ,即使它是一个全新的实例。

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

我希望我能回到Screen One,这样我才能支持多个用户帐户。

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

如何清除 WebView 中的会话/缓存/ 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();

然后将其设为默认值:

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中的会话/缓存/ cookie的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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