jbossおよびrhelイメージで実行されているJavaアプリケーションを使用しています。このアプリは転送プロキシとして機能します。ユーザーはそれを認証しなければなりません。そして、すべての要求は別のmvcアプリケーションに転送され、応答はフォワードプロキシ/認証アプリケーションにリダイレクトされます。また、Webサービスを使用してユーザーの資格情報をチェックします。このWebサービスのチェックは正常に機能します。通常のhttpアドレスにアクセスするときに証明書を見つけられなかったため、DefaultHttpClient.executeが失敗するのはなぜですか?
java転送プロキシの背後にあるmvcは、.NET mvcアプリケーションです。このアーキテクチャーは物理サーバ上でうまく動作しますが、私はオープンシフトポッドでの作業に1週間以上苦労しています。
資格情報が正常にWebサービスに対して検証された後、javaアプリケーションはmvcアプリケーション上のリソースにアクセスしようとします。これは、呼び出し側が安全であることを確認した後です(実際にはクライアントコードでget要求を受け取り、コードが有効な場合はhttp://Mvc/Administration/Administration?membershipNumber=409738467360)、要求をWelcomeビューにリダイレクトします。
ログファイルを見ると、mvcアプリがgetリクエストのために最初に200
を返すことがわかります。また、リダイレクト(302)からウェルカム(Welcome)ビューを受信します(この通信はすべてhttpsではなくhttpで行われます)。
その後、クラッシュします。
javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIXパスの構築に失敗しました:sun.security.provider.certpath.SunCertPathBuilderException:要求されたターゲットに
を有効な証明書パスを見つけることができませんがここにありますDefaultHttpClientリダイレクトコード:
httpClient.setRedirectStrategy(new DefaultRedirectStrategy(){
@Override
public boolean isRedirected(HttpRequest request, HttpResponse response, HttpContext context)
throws ProtocolException {
logger.info("Reverse proxy response: " + response.getStatusLine().getStatusCode());
boolean isRedirect = super.isRedirected(request, response, context);
int responseCode = response.getStatusLine().getStatusCode();
logger.info("Is redirect " + isRedirect);
if (!isRedirect) {
if (responseCode == 301 || responseCode == 302) {
logger.info("Forward proxy returning true");
return true;
}
}
logger.info("Forward proxy returning " + isRedirect);
return isRedirect;
}
});
私は何が間違っているのか全く分かりません。試してみるべきものはありません。どんな助けもありがたいです!
ありがとうございます!
手作りのソリューションを掲載しました。詳しい説明が必要な場合はお知らせください。 – Nathan
こんにちはネイサン、私はそれを試してみると、あなたに戻って、感謝! –