[英]Can't authenticate with different NTLM credentials in one session with java.net.URLConnection
[英]authenticate with ntlm (or kerberos) using java UrlConnection
我需要使用 java 使用 rest web 服务,传递域用户帐户的凭据。
现在我正在使用经典的 asp
set xmlHttp = server.createObject( "msxml2.serverxmlhttp" )
xmlHttp.open method, url, false, domain & "\" & user, password
xmlHttp.send body
out = xmlHttp.responseText
set xmlHttp = nothing
和 asp.net
HttpWebRequest request = (HttpWebRequest) WebRequest.Create( url );
request.Credentials = new NetworkCredential(user, password, domain);
request.Method = WebRequestMethods.Http.Get
HttpWebResponse response = (HttpWebResponse) request.GetResponse();
StreamReader outStream = new StreamReader( response.GetResponseStream(), Encoding.UTF8) ;
output = outStream.ReadToEnd();
我怎样才能用java实现这个? 考虑到我没有使用当前登录用户的凭据,我正在指定域帐户(我有密码)
请告诉我它和经典的 asp 和 asp.net 一样简单....
根据此页面,您可以使用内置的 JRE 类,但需要注意的是,早期版本的 Java 只能在 Windows 机器上执行此操作。
但是,如果您愿意忍受第 3 方依赖项,IMO Apache Commons HttpClient 3.x是您的不二之选。 这是使用身份验证的文档,包括 NTLM。 一般来说,HttpClient 是一个功能更强大的库。
HttpClient 的最新版本是 4.0,但是显然这个版本不支持 NTLM 这个版本需要一些额外的工作。
这是我认为代码的样子,尽管我还没有尝试过:
HttpClient httpClient = new HttpClient();
httpClient.getState().setCredentials(AuthScope.ANY, new NTCredentials(user, password, hostPortionOfURL, domain));
GetMethod request = new GetMethod(url);
BufferedReader reader = new InputStreamReader(request.getResponseBodyAsStream());
祝你好运。
java.net.URLStreamHandler 和 java.net.URL 的兼容解决方案是 com.intersult.net.http.NtlmHandler:
NtlmHandler handler = new NtlmHandler();
handler.setUsername("domain\\username");
handler.setPassword("password");
URL url = new URL(null, urlString, handler);
URLConnection connection = url.openConnection();
您还可以在 url.openConnection(proxy) 中使用 java.net.Proxy。
使用 Maven 依赖:
<dependency>
<groupId>com.intersult</groupId>
<artifactId>http</artifactId>
<version>1.1</version>
</dependency>
查看 SPNEGO HTTP Servlet Filter 项目中的 SpnegoHttpURLConnection 类。 这个项目也有一些例子。
该项目有一个客户端库,它几乎可以完成您在示例中所做的工作。
看看这个来自javadoc的例子......
public static void main(final String[] args) throws Exception {
final String creds = "dfelix:myp@s5";
final String token = Base64.encode(creds.getBytes());
URL url = new URL("http://medusa:8080/index.jsp");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty(Constants.AUTHZ_HEADER
, Constants.BASIC_HEADER + " " + token);
conn.connect();
System.out.println("Response Code:" + conn.getResponseCode());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.