Authenticator#getPasswordAuthentication在Weblogic中返回basic而不是ntlm

时间:2017-11-09 09:16:38

标签: java authentication weblogic ntlm

我们从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);
  }
}

1 个答案:

答案 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.htmlImpact/Risk on enable -DuseSunHttpHandler on Weblogic10.3.0& https://stackoverflow.com/a/27931816/131929(两者都有点旧)。

在某些时候,我(远程)调试期间注意到我没有java.net.http.*个对象,但是 weblogic .net.http.*。 WTF我想......是的,WLS默认取代标准的Sun网络堆栈