acegiは、browserlauncher 2を使用してURLを開くときにauthenticationcredentialsnotfoundexceptionをスローします
-
20-09-2019 - |
質問
ACEGIセキュリティを使用するJSF Webアプリケーションがあります。また、スタンドアロンのJavaスイングアプリケーションもあります。 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をスローすることです。何らかの理由で、認証された資格情報はセキュリティのコンテキストでは見られないようです。
なぜこれが起こっているのかという考えはありますか?誰かがもっと情報を必要とするなら、私は喜んで義務付けられます。
どうもありがとう、
リチャード
解決
私はAcegi/Springsecurityを行ったことがありませんが、症状は十分に明確です。いくつかの重要な情報がリクエストにありません。新しいものがない場合は、少なくともすべての応答ヘッダーを調査する必要があります ニーズ 後続の要求のヘッダーに渡される。 Acegi資格情報を表す別のCookieエントリかもしれません。
しかし、もう1つの警告は、必要な要求ヘッダーを渡す方法がないため、ローカルブラウザーインスタンスでURLだけを開くことができないことです。 SwingアプリケーションをビルトインWebbrowserとして機能させる必要があります。たとえば、anでHTML応答を取得します InputStream
スイングフレームに何らかの形でレンダリング/表示します。既存のAPIがまだ既存のAPIがないかどうかを確認します。なぜなら、それはあなたが最初に考えていたよりもはるかに多くの作業を伴うからです(控えめな表現)。
他のヒント
この場合、基本認証を行い、送信する代わりにすべてのリクエストでこのヘッダーを設定できます jsessionid:
AUTHORIZATION:Basic VVNFUk5BTUU6UEFTU1dPUkQ=
トークン vvnfuk5btuu6ueftu1dpukq = ユーザー名とパスワードエンコードされたbase64です。
例:
scott:tiger
は:
c2NvdHQ6dGlnZXI=
もう1つ:SSLを使用します。