0

ケースは簡単です: ユーザーがログアウトをクリックし、LogoutFilter に移動して:

    HttpServletRequest hreq = (HttpServletRequest) request;
    hreq.getSession(false).invalidate();

    HttpServletResponse httpResponse = (HttpServletResponse) response;

    httpResponse.reset();

    httpResponse.setHeader("Cache-Control", "no-cache");
    httpResponse.setHeader("Pragma", "no-cache");
    httpResponse.setHeader("Cache-Control", "no-store");
    httpResponse.setHeader("Cache-Control", "must-revalidate");
    httpResponse.setDateHeader("Expires", 0);

    chain.doFilter(request, response);

また、ページにログインリンクが表示されます。問題は簡単です。セッションは再作成されますが、ユーザー プリンシパルはキャッシュされるため、ログイン ポップアップは表示されず、アプリケーションはキャッシュされたプリンシパルを使用します。

質問は簡単です: ユーザー プリンシパルも削除する方法はありますか? そのため、ブラウザはログアウト後に再度ログインするよう求めますか?

4

2 に答える 2

0

ユーザーがログアウトしたら、セッションを無効にした後、(302リダイレクトを使用して)「ログアウト」ページにリダイレクトすることを検討します。その「うまくいけば」は、request.getUserPrincipals()が何も返さないようにします。

ところで、あなたがしているキャッシュ作業はあなたのウェブアプリケーションのキャッシュには何もしません。ここで指定しているのは、WebクライアントとWebプロキシがその特定のリクエストのキャッシュをどのように検討するかです。したがって、これらの値は、リクエストがサーバーを離れて「ワイルドに」送信された後に使用されます。

于 2011-04-18T16:25:18.427 に答える
0

ログアウト時にキャッシュをクリアするだけでなく、アプリケーションのページへのすべてのリクエストに対して、これらのメタ値を常にレスポンスに設定するフィルタをアプリケーションに用意します。この方法では、どのページもキャッシュされません。ブラウザのキャッシュをクリアして、もう一度お試しください。それは何かを修正しますか?

于 2011-04-18T15:39:35.540 に答える