我正在使用Jeresy Client Api与Rest服务进行通信。我想处理来自服务器的401响应。无论何时服务器给401 Jersey提供自己的验证对话框,如浏览器的用户名和密码。Jersey客户端基本身份验证对话取消
client.addFilter(new com.sun.jersey.api.client.filter.HTTPBasicAuthFilter(username,password));
有没有办法隐藏或压制这个Dialgue并呈现我的自定义Dialgue。
我正在使用Jeresy Client Api与Rest服务进行通信。我想处理来自服务器的401响应。无论何时服务器给401 Jersey提供自己的验证对话框,如浏览器的用户名和密码。Jersey客户端基本身份验证对话取消
client.addFilter(new com.sun.jersey.api.client.filter.HTTPBasicAuthFilter(username,password));
有没有办法隐藏或压制这个Dialgue并呈现我的自定义Dialgue。
我在开发使用Jersey Client API向RESTful Web服务发出HTTP请求的Eclipse插件之前就已经看到过这类问题。每当Web服务响应401 HTTP状态代码时,Eclipse都会自动显示一个标准认证对话框,要求用户输入用户名和密码。
我可以通过删除默认的Authenticator
实例来抑制这个不需要的认证对话框。
Authenticator.setDefault(null);
如果你做到这一点,从您的应用程序的初始化阶段,您可以使用Jersey客户端API进行任何HTTP请求之前,应该防止默认的身份验证对话框:您可以使用下面的代码片段做到这一点在发生401 HTTP响应时显示。
详情请参阅Authenticator
documentation。
如果您想要显示自己的自定义验证对话框而不是默认对话框,则可以实现显示所需对话框的Authenticator
自定义子类。然后您可以在您的应用程序中使用Authenticator.setDefault(customAuthenticator);