0

アプリケーション サーバーとして Apache Geronimo を使用しています。認証は、Apache Directory Service を使用して LDAP 経由で行われます。JavaEE ソフトウェア開発の経験がないので、お手柔らかにお願いします。もっと詳しく説明する必要がある場合はお知らせください。

基本的に、私のログイン手順は、geronimo のドキュメントにある次の例とよく似ています: https://cwiki.apache.org/GMOxDOC22/ldap-sample-app-ldap-sample-application.html

ユーザーがログインしようとしているときに発生している 3 つの異なる動作があります。

  1. ユーザーが正しい LDAP グループにある正しいユーザー名でログインすると、サイトの安全な領域に移動します。また、セッションが終了するまでユーザーをサイトからログアウトする方法がわかりません。

  2. ユーザーが LDAP ディレクトリにないユーザー名/パスワードでログインすると、ユーザーは /auth/logonError.html?param=test にリダイレクトされます (この場所は「web.xml」で指定されています)。

  3. ユーザーが適切なグループにない正しいユーザー名/パスワードでログインすると、「HTTP 403 禁止ページ」にリダイレクトされます。LDAP サンプルの下部に、このページの例があります。動作は、認証されていないユーザーと同じである必要があります。

いずれの場合も、ブラウザを再起動するか別のブラウザを使用するまで、ユーザーがログイン プロセスを再試行する方法はありません。これは私が抱えている大きな問題です。

次のシナリオが発生することを望みます。

  1. 適切に認証されたユーザーは、ログアウトして、再度ログインを試みることができます。

  2. 不適切に認証されたユーザーは、ログイン画面にリダイレクトされ、再試行するように指示されます。

これを実現するにはどうすればよいですか? ご協力いただきありがとうございます。

4

1 に答える 1

0

いつもこうじゃないですか。問題に遭遇し、数日間苦労し、最終的にそれを StackOverflow( または どこでも ) に投稿すると、比較的簡単に問題を解決できます。

問題を修正するアプリケーションにいくつかの変更を加えました。同様の問題で誰かがグーグルからこれに出くわした場合に備えて、私がしたことを投稿しています。

最初に、これを実行するサーブレット (EndSessionServlet と呼ばれる) を作成しました。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    endSession(request, response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    endSession(request, response);
}

private void endSession(HttpServletRequest request, HttpServletResponse response) throws IOException{
    request.getSession().invalidate();
    response.sendRedirect(".");
}

そして、これを web.xml ファイルに追加しました。

<error-page>
 <error-code>403</error-code>
 <location>/EndSessionServlet</location>
</error-page>

また、web.xml の form-error-page も変更しました。

<login-config>
<auth-method>FORM</auth-method>
<realm-name>This is not used for FORM login</realm-name>
<form-login-config>
  <form-login-page>/login.jsp</form-login-page>
  <form-error-page>/EndSessionServlet</form-error-page>
</form-login-config>
</login-config>

そして、EndSessionServlet に対して認証される Web ページのセクションにリンクを追加しました。したがって、認証されたユーザーは適切にログアウトできます。

3 つのシナリオの場合:

  1. ユーザーは適切にログインできます。ユーザーは EndSessionServlet へのリンクをクリックしてログアウトします。
  2. ユーザーが LDAP の有効なユーザー名/パスワードを入力しましたが、正しいグループに属していません。このユーザーは通常どおり 403 ページに送られ、セッションが無効になり、ログオン ページにリダイレクトされます。
  3. ユーザが無効なユーザ名/パスワードを入力すると、EndSessionServlet にも設定されている に送信されます。これでセッションが終了し、ログイン ページにリダイレクトされます。

したがって、すべてのシナリオが正常に機能するようになりました。

于 2010-07-27T14:49:25.137 に答える