我正在使用 Jeresy Client Api 与 Rest 服务进行通信。我想处理来自服务器的 401 响应。每当服务器向 401 Jersey 提供其自己的身份验证对话框(例如浏览器的用户名和密码)时。
client.addFilter(new com.sun.jersey.api.client.filter.HTTPBasicAuthFilter(用户名,密码));
有没有办法隐藏或抑制此对话并呈现我的自定义对话。
最佳答案
我之前在开发使用 Jersey Client API 向 RESTful Web 服务发出 HTTP 请求的 Eclipse 插件时就遇到过此类问题。每次 Web 服务响应 401 HTTP 状态代码时,Eclipse 都会自动显示一个标准身份验证对话框,要求用户输入用户名和密码。
我能够通过删除默认的Authenticator
实例来抑制这个不需要的身份验证对话框。您可以使用以下代码片段来完成此操作:
Authenticator.setDefault(null);
如果您在应用程序的初始化阶段执行此操作,那么在使用 Jersey Client API 发出任何 HTTP 请求之前,如果发生 401 HTTP 响应,它应该会阻止显示默认身份验证对话框。
请引用Authenticator
documentation了解更多详情。
如果您想显示自己的自定义身份验证对话框而不是默认对话框,您可以实现 Authenticator
的自定义子类来显示所需的对话框。然后,您可以使用 Authenticator.setDefault(customAuthenticator);
关于java - Jersey 客户端基本身份验证对话抑制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18525010/