0

Acegi セキュリティを使用する JSF Web アプリケーションがあります。スタンドアロンの Java Swing アプリケーションもあります。Swing アプリの機能の 1 つは、ユーザーのホームページをブラウザー ウィンドウにロードすることです。

これを行うために、現在 Commons HttpClient を使用して Web アプリでユーザーを認証しています。

String url = "http://someUrl/j_acegi_security_check";
HttpClient client = new HttpClient();
System.setProperty(trustStoreType, "Windows-ROOT");
PostMethod  method = new PostMethod(url);
method.addParameter("j_username", "USERNAME");
method.addParameter("j_password", "PASSWORD");
int statusCode = client.executeMethod(method);
if (statusCode == HttpStatus.SC_MOVED_TEMPORARILY ) {
    Header locationHeader= method.getResponseHeader("Location");
    String redirectUrl = locationHeader.getValue();
    BrowserLauncher launcher = new BrowserLauncher();
    launcher.openURLinBrowser(redirectUrl);
}

これは、HTTP 302 リダイレクト応答を返します。そこからリダイレクト URL を取得し、BrowserLauncher 2 を使用して開きます。URL には、次のような新しいセッション ID が含まれています。

http://someUrl/HomePage.jsf;jsessionid=C4FB2F643CE48AC2DE4A8A4C354033D4

私たちが見ている問題は、Acegi がリダイレクトを処理するが、AuthenticationCredentialsNotFoundException をスローすることです。何らかの理由で、認証された資格情報がセキュリティ コンテキストで見つからないようです。

なぜこれが起こっているのか、誰かが考えを持っていますか? 誰かがより多くの情報を必要とする場合、私は喜んで義務付けます.

どうもありがとう、

リチャード

4

2 に答える 2

1

私は Acegi/SpringSecurity を行ったことはありませんが、症状は明らかです。リクエストに重要な情報が欠けています。後続のリクエストのヘッダーで返す必要がある新しいものがない場合は、少なくともすべてのレスポンス ヘッダーを調査する必要があります。おそらく、Acegi 資格情報を表す別の Cookie エントリです。

しかし、もう 1 つの注意点は、実際にはローカル ブラウザー インスタンスで URL だけを開くことはできないということです。これは、必要な要求ヘッダーをそれに沿って渡す方法がないためです。Swing アプリケーションを組み込みの Web ブラウザとして機能させる必要があります。たとえば、HTML 応答を取得InputStreamし、Swing フレームでレンダリング/表示します。そのための既存の API がまだないかどうかを確認します。これは、最初に考えていたよりもはるかに多くの作業が必要になるためです.. (控えめな表現)。

于 2010-01-13T16:18:49.927 に答える