gpt4 book ai didi

java - 清除 JavaFX WebView 中的 session /缓存/cookie

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:59:43 25 4
gpt4 key购买 nike

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

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 获得以下 URL。我将使用 SimpleSwingBrowser 加载以下 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

第一次期间,将显示以下 UI。

屏幕一

enter image description here

屏幕二

enter image description here

在我之后

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

我希望 Google 会再次向我显示 Screen One,因为这是一个新的浏览 session 。然而,我第二次得到的是屏幕二。

看起来,WebView 中有一些存储的 session /缓存/cookie,即使它是一个全新的实例。

我希望自己回到屏幕一,这样我就可以支持多个用户帐户。

如何清除 WebView 中的 session /缓存/cookie?

最佳答案

JavaFX WebView 的 session cookie 存储在 java.net.CookieHandler 中。

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

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

然后将其设置为默认值:

java.net.CookieHandler.setDefault(manager);

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

manager.getCookieStore().removeAll();

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

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

关于java - 清除 JavaFX WebView 中的 session /缓存/cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23409138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com