0

当从 Web 服务器接收到 401 消息时,有没有办法使用 Java 覆盖浏览器身份验证对话框?我想知道何时显示此对话框,而不是将其提供给用户,而是填写他们的凭据。

应用概述:

我编写了 Web 服务器,所以基本上我想阻止某人打开外部浏览器并输入 localhost 和端口来访问正在显示的数据。我的应用程序有一个嵌入式网络浏览器,链接到我的书面服务器。浏览器显示解密的内容,因此如果我强制进行身份验证(即使对于我的嵌入式浏览器),外部浏览器也需要凭据。如果我的嵌入式浏览器试图访问文件,我会为用户提供凭据并显示内容

4

5 回答 5

1

如果您不关心显示的密码,您可以构建 URL,以便它通过凭据 ex。http://username:password@www.example.com 这将绕过身份验证框,但会向用户显示凭据,因此也可能不是您要查找的内容。

于 2009-05-21T19:33:56.340 回答
1

SWT 3.5M6 中有一个新的侦听器,称为 AuthenticationListener。它只是侦听从服务器传递的身份验证事件并被触发。下面的代码是执行我想要的行为的代码。它等待身份验证,如果主机是我的应用程序,它会传回凭据。当然,用适当的变量填写 USER_NAME、PASSWORD 和 HOST_NAME。否则,它会弹出浏览器身份验证对话框并让用户输入凭据。此代码也可以在 Eclipse SWT 片段页面中找到:

webBrowser.addAuthenticationListener(new AuthenticationListener()

{

        public void authenticate(AuthenticationEvent event) {
            try {
                URL url = new URL(event.location);

                if (url.getHost().equals(HOST_NAME)) 
                {
                    event.user = USER_NAME;
                    event.password = PASSWORD;
                } 
                else 
                {       
                    /* do nothing, let default prompter run */
                }
            } catch (MalformedURLException e) {
                /* should not happen, let default prompter run */
            }
        }
    });
于 2009-05-29T14:31:17.723 回答
0

如果您想控制显示给用户的身份验证内容,您可以将 web.xml 的 login-config 部分中的 auth-method 从 BASIC 更改为 FORM。

然后您可以指定在用户进行身份验证时应该显示哪个页面,并且,我想,为他们预先填写凭据......但这不会破坏安全的全部目的吗?

为 Web 应用程序设置身份验证

在进一步详细信息后编辑:

我唯一的建议是将 auth-method 更改为 CLIENT-CERT 并需要双向 SSL,其中客户端还需要向服务器提供证书。如果您将证书安装到嵌入式浏览器中(并确保外部浏览器无法获取证书),那么您应该没问题。实际上,这应该会阻止显示任何身份验证对话框。

于 2009-05-21T19:32:19.040 回答
0

你的问题有点不清楚。整个基本身份验证基于 HTTP 标头。

如果浏览器获得授权标头,则显示对话框。然后将对话中的内容发送回服务器。它没有什么特别之处。它是 base64 编码的用户名:密码。看一下

维基百科

问题是你想如何干预。您必须捕获授权标头,然后对于下一个请求,您必须更改 HTTP 标头以包含凭据。

希望有帮助

于 2009-05-21T19:36:28.860 回答
0

我认为这主要是依赖于浏览器的行为以及服务器向浏览器报告的内容。

例如,作为 Microsoft 产品的 Internet Explorer 直接支持在匿名请求 401 失败后自动发送 Windows 凭据(您可以在 Internet 设置中修改此行为)。

例如,Firefox 不会也将始终提示用户,即使它被设置为通过密码管理器记住 id 和密码。如果自动登录失败,IE 也会提示(例如您的 Windows 凭据仍然会导致 401,因为您的 id 不被允许)。

我不认为,作为一名 Web 开发人员,除了将服务器和应用程序设置为以最预期和最和谐的方式工作之外,您对此没有太多控制权......如果可以的话,这可能会进入黑帽领域

于 2009-05-21T19:37:26.583 回答