2017-11-09 13 views
0

Webブラウザで次のJSON URLにアクセスするのは簡単です。入力ボックスにJSONデータが正しく表示されるユーザー名とパスワードを要求する認証ボックス。Javaサーブレットまたはクラス内から外部JSON URLをリクエストする方法JSON URLが別のサーバー/ドメインのNTLM認証の背後にある場合

www.json-behind-ntlm-authentication.com/view-data 

これをJavaサーブレットに移行しようとしています。

私はHttpClientライブラリhttp://hc.apache.orgをテストしましたが、私が試したすべての例は動作しません。私が試したコードのほとんどは正しくコンパイルされません。

また、私はJsoup、https://jsoup.org/をテストしました。これは、Webスクレイピング用の非常に優れたライブラリですが、NTLM認証の背後にあるページへのアクセスをサポートしていないようです。

ここで見つかったコードは、https://blogs.msdn.microsoft.com/freddyk/2010/01/19/connecting-to-nav-web-services-from-java/です。これは、NTLM認証の背後にあるJSON URLへのアクセスに関連する唯一のコードサンプルです。これは実際に私が達成しようとしているものです.Webサービスを通じてMicrosoft NavデータにアクセスするJava Webアプリケーションです。この公式の例でさえもコンパイルされません。

任意のポインタ/オプション?この問題が解決されたどこかのJavaライブラリが必要ですか?アクセスは現在HTTP経由で行われていますが、最終的にはセキュリティ上の理由からSSL経由になるため、どのソリューションもSSLハンドシェイクをサポートしている必要があります。

LINQ、https://blogs.msdn.microsoft.com/freddyk/2009/04/20/using-linq-with-nav-web-services/を使用して別のC#アプリケーションをビルドしたくないのですが、期待していますが、コンパイルされていないJavaの例に基づいてこのシナリオでC#の例が動作することは期待していません。検索の非常に多くの後

UPDATE

、私が働いに近いと思われるの下に次のコードを見つけたが、非常ない - これは破壊され、コード内のコメントを参照してください。コメントの中のポインタをありがとう。

DefaultHttpClient httpclient = new DefaultHttpClient(); 
      List<String> authpref = new ArrayList<String>(); 
      authpref.add(AuthPolicy.NTLM); 
      httpclient.getParams().setParameter(AuthPNames.TARGET_AUTH_PREF, authpref); //ERROR - This causes an error: java.lang.VerifyError: Cannot inherit from final class 
      NTCredentials creds = new NTCredentials(username, password, "", domain); 
      httpclient.getCredentialsProvider().setCredentials(AuthScope.ANY, creds); 
      HttpHost target = new HttpHost(baseURL); 
      // Make sure the same context is used to execute logically related requests 
      HttpContext localContext = new BasicHttpContext(); 
      // Execute a cheap method first. This will trigger NTLM authentication 
      HttpGet httpget = new HttpGet(baseURL); 
      HttpResponse response1 = httpclient.execute(target, httpget, localContext); //ERROR - This line is throwing an error: java.lang.VerifyError: Cannot inherit from final class 
      HttpEntity entity = response1.getEntity(); 
      System.out.println(EntityUtils.toString(entity)); 

私はこの問題を実際どのように解決するかについてまだ不明です。任意の追加ポインタ?

答えて

0

org.apache.http.authあなたは春ブーツでHttpComponentsMessageSenderに使用することができますNTCredentialsを持って@Configuration

HttpComponentsMessageSender httpComponentsMessageSender =新しいHttpComponentsMessageSender(); NTCredentials資格=新しいNTCredentials( "username"、 "password"、null、 "domain");

+0

@codebraneに関するお問い合わせありがとうございます。現在、WebアプリケーションはSpringを使用していません。 Springフレームワークを使用するためにプロジェクト全体を移行することなく、結果を達成する方法を知っていますか?あるいは、Springのこの部分だけを現在のプロジェクトに統合することは可能ですか? –

+0

あなたは春以外にNTCredentialsを使うことができます。詳細はhttps://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html 4.7.1。 NTLM接続の永続性 – codebrane

+0

私はちょうどより多くの情報で質問を更新しました。あなたが言及しているNTCredentialsは、私が持っているコードの中で作業しているようですが、まだかなり働いていません。任意の追加ポインタ? –

関連する問題