サーブレット3.0ログアウトは機能しません
-
04-10-2019 - |
質問
サーブレット3.0の認証機能に問題があります。
このコードをサーブレットv3で:
log.info(""+request.getUserPrincipal());
log.info(""+request.getAuthType());
log.info("===^===");
request.logout() ;
log.info(""+request.getUserPrincipal());
log.info(""+request.getAuthType());
request.authenticate(response) ;
log.info("===v===");
log.info(""+request.getUserPrincipal());
log.info(""+request.getAuthType());
私は...するだろう いつも のために、ユーザー名/ログインウィンドウが表示されることを期待してください logout()
働き。代わりに、それは資格情報を再現し、私のログアウトをキャンセルする「キャッシュ」メカニズムのようです...
管理者
基本
===^===
ヌル
ヌル
=== v ===
管理者
基本
それは私のFirefoxの問題ですか、それともサーブレットコードに欠けているものですか?
解決
私は常にユーザー名/ログインウィンドウを見ることを期待しています。
logout()
働き。代わりに、それは資格情報を再現し、私のログアウトをキャンセルする「キャッシュ」メカニズムのようです...
これがHTTP Basic Authの設計方法であり、すべての認証状態をクライアントに保持することができます。言い換えれば、それ 無理だよ 基本/ダイジェスト認証を使用してログアウトするために、サーバーは、サーバーへの後続のリクエストで基本的なAUTH認証器をキャッシュして復活させるのを止めることはできません。
私の提案は、フォームベースの認証と login
の方法 HTTPServletRequest
.
参照
他のヒント
どちらでもありません。ログインすると、ブラウザは常にユーザーIDとパスワードをURLに渡します。ブラウザを再起動するまで。私が知る限り、各ブラウザはそれをしています。そして、私が知る限り、現在、ブラウザに資格情報を忘れるように言う方法はありません。
ただし、ログアウトするとセッションが異なることがわかります。通常の解決策は、セッションに何らかの変数を追加することです。 「ロゲディン」と言います。この変数が欠落している場合、ユーザーが最初にログインする必要があることがわかり、login.jspと言ってリダイレクトします。そして、ユーザーがこのJSPに合格すると、この変数を再度設定します。
フィルターを使用すると、このシステム全体を実施できます。