2015-02-23 2 views
3

Я «принуждением» в HttpClient сделать NTLM аутентификации с помощью:HttpClient дает Обсудите ошибку с провайдером NTLM Идентом

PoolingHttpClientConnectionManager connPool connPool = new PoolingHttpClientConnectionManager(); 

    Lookup<AuthSchemeProvider> authProviders = RegistryBuilder.<AuthSchemeProvider>create() 
      .register(AuthSchemes.NTLM, new NTLMSchemeFactory())     
      .build(); 

    CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(connPool).setDefaultAuthSchemeRegistry(authProviders).build(); 

Но при проверке подлинности на сервер, я получаю раздражает сообщение журнала «схема аутентификации Обсуди не поддерживается".

Как я могу избавиться от этого сообщения?

(Это будет работать на коробке Linux, так HttpClient 4.4 Поддержка ЮНА для нативного аутентификации не поможет.)

+0

Я также попытался добавить: 'Список authpref = новый ArrayList(); authpref.add (AuthPolicy.NTLM); httpclient.getParams(). SetParameter (AuthPNames.TARGET_AUTH_PREF, authpref); ' Но оно дает то же сообщение. В приведенном выше коде используются устаревшие API, но я не мог найти, как это сделать по-новому. –

ответ

1

Я думаю, что это все очень просто. Фактически клиент только желает сделать NTLM, пока сервер только хочет сделать Negotiate, что не позволяет договориться об общей схеме аутентификации.

Это, как можно настроить предпочтение схемы аутентификации, чтобы заставить HttpClient выбрать NTLM над SPNEGO/Kerberos

RequestConfig config = RequestConfig.custom() 
     .setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, AuthSchemes.KERBEROS, AuthSchemes.SPNEGO)) 
     .build(); 
CloseableHttpClient client = HttpClients.custom() 
     .setDefaultRequestConfig(config) 
     .build(); 
+0

Звучит разумно - но сервер предлагает как переговорные, так и NTLM. Я должен также упомянуть, что аутентификация действительно преуспевает с кодом, она просто вызывает раздражающее сообщение журнала (и я предполагаю, что он занимает больше времени для аутентификации, поскольку он пытается выполнить проверку подлинности на переговорах). –

+0

Предупреждающее сообщение является прямым следствием отключения вашего кода в качестве поддерживаемой схемы аутентификации. Если вы хотите устранить это предупреждение, не переопределяйте установленный по умолчанию набор схем auth и используйте вместо него специальную настройку схемы аутентификации – oleg

+0

Отлично - так это сработало, спасибо! Я думал, что, не поддерживая схему аутентификации, это не будет рассмотрено. Мне странно, что это не так, как это работает, но я рад, что вы были здесь, чтобы объяснить. –