Java在哪里存储记住的HTTP基本身份验证密码?如何删除它们?

Java在哪里存储记住的HTTP基本身份验证密码?如何删除它们?,java,http,java-web-start,Java,Http,Java Web Start,我有一个JavaSwing应用程序,它通过WebStart启动,并通过URL访问服务器上的数据文件。这些文件由Apache2提供,带有HTTP基本身份验证。Java会弹出一个对话框,提示用户登录,效果很好 当用户选中“在密码列表中保存此密码”时,就会出现问题。然后密码改变了,或者一开始就不正确,你就被卡住了。这显然不够聪明,不能再给你一次机会。如果您保存的登录失败,则会出现401错误,仅此而已 那么,它将保存的密码存储在哪里?如何删除它们 所涉及的代码如下所示: // uri is a Stri

我有一个JavaSwing应用程序,它通过WebStart启动,并通过URL访问服务器上的数据文件。这些文件由Apache2提供,带有HTTP基本身份验证。Java会弹出一个对话框,提示用户登录,效果很好

当用户选中“在密码列表中保存此密码”时,就会出现问题。然后密码改变了,或者一开始就不正确,你就被卡住了。这显然不够聪明,不能再给你一次机会。如果您保存的登录失败,则会出现401错误,仅此而已

那么,它将保存的密码存储在哪里?如何删除它们

所涉及的代码如下所示:

// uri is a String
URL url = new URL(uri);
HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();

// check HTTP response code
int responseCode = urlConnection.getResponseCode();
if (responseCode != HttpURLConnection.HTTP_OK)
  throw new IOException("\nHTTP response code: " + responseCode);

// read the file
BufferedReader reader = new BufferedReader 
               (new InputStreamReader (urlConnection.getInputStream ()));
... etc ...
该代码工作正常,但在这种情况下,用户保存了一个错误的密码,在这种情况下,您将获得401

我的理解是,Java WebStart将其钩子放入Java.net类中,这样您就可以获得密码提示之类的东西,而从命令行或IDE运行相同的代码是无法获得密码提示的。所以,这个问题实际上是关于这种行为


谢谢

没有代码?现在你得到了一个模糊的答案。根据您的HttpClient,它可能存储在cookies或其他东西中。重新初始化HttpClient将是调试的第一步。如果这不起作用,在这里发布一些代码将非常有用。

在windows中,密码保存在下面的文件中

{user\u name}\AppData\LocalLow\Sun\Java\Deployment\security\auth.dat


您可以删除此文件以清除保存的密码。

rm-rf~
可能会在Linux/Unix/MacOS系统上执行此操作。(开玩笑。别试着这么做。这就像把你的房子烧了,可以去除沙发上的污渍。)嗨,我添加了代码,但我很确定答案是清除缓存或删除某个地方的文件,可能取决于操作系统。这段代码已经运行了很多年,所以我不想更改代码。