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

应用概述:

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

有帮助吗?

解决方案 2

SWT 3.5M6在其内具有一个新的侦听调用AuthenticationListener。它只是监听来自服务器认证通过事件被触发。下面的代码是什么执行我想要的行为。它等待身份验证,如果主机是我的应用程序,它传回的凭据。当然填写USER_NAME,密码和HOST_NAME与相应的变量。否则,它让浏览器认证对话框弹出,使用户输入凭据。该代码也可在Eclipse SWT片段页找到:

webBrowser.addAuthenticationListener(新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 */
            }
        }
    });

其他提示

如果你不关心显示,因此凭据传递前,你可以构造URL的密码。 的http://用户名:password@www.example.com 这将通过认证盒但会显示用户的凭据,以便也可能不是你所期待的。

你的问题是有点不清楚。整个基本认证是基于HTTP头。

如果浏览器获得的授权首标比它显示的对话框。从对话的内容,然后发送回服务器。没有什么特别的地方。它伊瑟尔用户名:密码base64编码。看看

维基

问题是你想怎么干涉。你将不得不捕获授权头,然后你必须改变HTTP标头包括凭据下一个请求。

希望帮助

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

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

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

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

如果要控制的显示内容向用户进行认证,可以改变在从BASIC web.xml中的登录-配置部,以形成在auth方法。

然后,您可以指定要显示的内容页面,当用户进行身份验证,而且,我想,预填他们的凭据...但是没有安全的这场失利的全部目的?

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

后进一步细节编辑:

我的唯一的建议是在auth方法改变为CLIENT-CERT和需要双向SSL,其中,还需要提供证书到服务器的客户端。如果您安装证书到您的嵌入式浏览器(并确保外部浏览器无法拿到证书),那么你应该确定。而实际上这应该停止显示任何身份验证对话框。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top