我们从Java到针对MS Sharepoint的NTLM身份验证在所有环境中工作,但是在Weblogic Server中。
在WLS中,我们看到Authenticator#getPasswordAuthentication
返回'基本'而不是' ntlm'。这种行为的原因是什么?如果单独运行或从Tomcat内部运行(使用相同的JVM),相同的代码可以正常工作。
相关代码如下:
NtlmAuthenticator authenticator = new NtlmAuthenticator(configParameters.getNtlmUsername(),
configParameters.getNtlmPassword(), configParameters.getNtlmDomain());
log.info("JVM running with security manager enabled: {}", System.getSecurityManager() != null);
// requires NetPermission 'setDefaultAuthenticator' if security manager enabled
Authenticator.setDefault(authenticator);
public class NtlmAuthenticator extends Authenticator {
private char[] password;
private String userAuthentication;
public NtlmAuthenticator(String username, String password, String domain) {
userAuthentication = username;
if (StringUtils.isNotBlank(domain)) {
// According to
// https://msdn.microsoft.com/en-us/library/windows/desktop/aa380525(v=vs.85).aspx
userAuthentication = domain + "\\" + username;
}
this.password = password.toCharArray();
}
@Override
public PasswordAuthentication getPasswordAuthentication() {
log.debug("Scheme: '{}'", getRequestingScheme());
return new PasswordAuthentication(userAuthentication, password);
}
}
答案 0 :(得分:0)
简答1
使用Apache httpclient的修补版本:https://issues.apache.org/jira/browse/HTTPCLIENT-1881
简短回答2
启动WebLogic Server时设置-DUseSunHttpHandler=true
。一些参考文献:https://docs.oracle.com/en/cloud/paas/javase-cloud/csjsu/you-should-now-set-sun-http-handlers-property-value-true-when-making-outbound-http-s-calls.html,Impact/Risk on enable -DuseSunHttpHandler on Weblogic10.3.0& https://stackoverflow.com/a/27931816/131929(两者都有点旧)。
在某些时候,我(远程)调试期间注意到我没有java.net.http.*
个对象,但是 weblogic
.net.http.*
。 WTF我想......是的,WLS默认取代标准的Sun网络堆栈 。