2017-07-02 4 views
0

JerseyとApache HttpClientを使用する既存のアプリケーションにNTLN認証を追加する際に問題があります。私はJCIFSのみを使用して認証できました.HttpClientのデフォルトNTLM認証は機能しません(401)。JCIFをJerseyで使用できますか?

のApache HttpClientをページからの例では、CloseableHttpClientを使用する方法を示しています。 https://hc.apache.org/httpcomponents-client-4.5.x/ntlm.html

Registry<AuthSchemeProvider> authSchemeRegistry = RegistryBuilder.<AuthSchemeProvider>create() 
    .register(AuthSchemes.NTLM, new JCIFSNTLMSchemeFactory()) 
    .register(AuthSchemes.BASIC, new BasicSchemeFactory()) 
    .register(AuthSchemes.DIGEST, new DigestSchemeFactory()) 
    .register(AuthSchemes.SPNEGO, new SPNegoSchemeFactory()) 
    .register(AuthSchemes.KERBEROS, new KerberosSchemeFactory()) 
    .build(); 
CloseableHttpClient httpClient = HttpClients.custom() 
    .setDefaultAuthSchemeRegistry(authSchemeRegistry) 
    .build(); 

しかしCloseableHttpClientで、私はtargetようなメソッドを使用することはできません。

WebTarget target = client.target(this.my Address).path(elementPath) 
      .resolveTemplate(P_ID, myId); 

のみexecuteがあります。

私は私が私の全体のアプリケーションを書き換え、基本的にHttpClientは次のように呼び出すだけ使うべきかどうかわからないんだけど:

HttpGet httpGet = new HttpGet(repositoryAddress + "/" + "element/70032_1498404600000(,,arm)"); 
CloseableHttpResponse response = httpClient.execute(httpGet); 

またはジャージーで使用することができjavax.ws.rs.client.ClientにAuthSchemesを設定するためにいくつかの他の方法は、ありますか?

答えて

2

私は同様の問題に直面し、私のアプローチは、以下だった:あなたはコネクタとしてApacheConnectorProviderを使用している場合は、ここでhttps://github.com/jersey/jersey/tree/master/connectors/apache-connector/src/main/java/org/glassfish/jersey/apache/connectorたApacheConnectorコードを()をオーバーライドすることができます)

1。私の場合、カスタムConnectorProviderとConnectorを作成しなければなりませんでした。

2)カスタムプロパティを作成するか、HttpClientContext.AUTHSCHEME_REGISTRYを使用してClientConfigに配置します(Jersey Clientでクライアントのプロパティを設定する方法です)。

3)builder.get(またはpostなどの方法)を呼び出すと、カスタムコネクタが呼び出されます。カスタムコネクタでは、上記の手順で設定したプロパティを確認できます。設定されている場合、ClosableHttpClient(ApacheConnectorはその実装でClosableHttpClientを使用します)に指定されているのと同じように、DefaultAuthSchemeRegistryを設定できます。

これはハックの一種かもしれませんが、私のためにうまく動作します。希望がこれを助ける:)

関連する問題