4

サーブレット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の問題ですか、それともサーブレットコードに欠けているものですか?

4

2 に答える 2

4

機能があるので、ユーザー名/ログインウィンドウが表示されることを常に期待していlogout()ます。代わりに、クレデンシャルを再入力してログアウトをキャンセルする「キャッシュ」メカニズムのようです...

これがHTTPBASICAUTHの設計方法であり、すべての認証状態をクライアントに保持できるようにします。つまり、基本/ダイジェスト認証でログアウトすることは不可能であり、サーバーは、サーバーへの後続の要求でクライアントがBASIC認証認証システムをキャッシュして再送信するのを停止できません。

私の提案は、フォームベースの認証とのlogin方法を使用することですHTTPServletRequest

参考文献

于 2010-05-23T14:46:50.933 に答える
1

どちらでもありません。ログインすると、ブラウザは常にユーザーIDとパスワードをURLに渡します。ブラウザを再起動するまで。私の知る限り、各ブラウザはそれを行います。そして、私が知る限り、現在、資格情報を忘れるようにブラウザに指示する方法はありません。

ただし、ログアウトするとセッションが異なることがわかります。通常の解決策は、ある種の変数をセッションに追加することです。「loggedin」と言います。この変数が欠落している場合は、ユーザーが最初にログインする必要があることを知っており、login.jspと言うようにリダイレクトします。そして、ユーザーがこのjspを渡したら、この変数を再度設定します。

フィルタを使用すると、これをシステム全体に適用できます。

于 2010-05-23T13:01:28.753 に答える