この動作は正常です。サーブレット仕様では、ユーザーが保護されたリソースを要求し、ユーザーがまだ資格情報を提供していない場合にのみ、コンテナー管理認証(つまり、ログイン)の手順が示されます。あなたのシナリオを含め、他のすべてのシナリオは未定義のままです。
「禁止された」状態をキャプチャする場合は、WEB-INF / web.xmlの<error-page>マッピングを使用して、ログインページを含む任意の場所にユーザーを送信できます。コンテナは上記の条件が満たされている場合にのみログインを受け入れるため、最初にユーザーをログアウトする必要がある場合があります(ユーザーのセッションを終了することにより)。
私がお勧めするのは、「このリソースにアクセスできません。別のユーザーとしてログインしてアクセスする場合は、[ここ]をクリックしてください」という「禁止」ページです。[ここ]は、ユーザーのセッションを終了してから、ユーザーがアクセスしようとしたリソースにリダイレクトするサーブレットへのリンクです。これにより、コンテナは認証を要求し(つまり、ログインフォームを提示し)、資格情報を確認し、ユーザーを目的のリソースに送信します。
サーブレット仕様のバージョン3.0とともにコンテナ(およびwebapp)を使用している場合は、プログラムでユーザーをwebappにログインさせるために使用できる新しいHttpServletRequest.login()メソッドがあります。セッションを終了してすべてのリダイレクトを実行する代わりに、それを使用できる場合があります...代わりに、ユーザー名とパスワードを自分で収集してから、コンテナーにログインを依頼することができます。