質問

サーブレット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に合格すると、この変数を再度設定します。

フィルターを使用すると、このシステム全体を実施できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top