[解決済み] ログアウト後に、以前に閲覧した保護されたページを表示しないようにする。
質問
ログアウト/サインアウト後に、エンドユーザーが制限されたページに戻ることができないようにする必要があります。しかし現在、エンド ユーザーはブラウザーの戻るボタン、ブラウザーの履歴へのアクセス、またはブラウザーのアドレス バーに URL を再入力することによっても、それを行うことができます。
基本的に、私は、エンド ユーザーがサインアウト後に制限されたページにどのような方法でもアクセスできないようにしたいのです。これを実現するには、どうすればよいでしょうか。JavaScript で戻るボタンを無効にすることはできますか?
どのように解決するのですか?
あなたは はできませんし、してはいけません。 ブラウザの戻るボタンや履歴を無効にしてください。それはユーザーエクスペリエンスにとって悪いことです。JavaScript のハックはありますが、信頼性が低く、クライアントが JS を無効にしている場合は機能しません。
あなたの具体的な問題は、要求されたページがサーバーから直接ではなく、ブラウザーのキャッシュから読み込まれることです。これは基本的には無害ですが、エンドユーザーが本当にサーバーから送られてきていると誤って考えてしまうため、確かに混乱します。
ブラウザに次のように指示するだけです。
ではなく
キャッシュ
すべて
を制限された JSP ページ (したがってログアウトページ/アクションそのものだけではありません!) にキャッシュします。この方法では、ブラウザはキャッシュからではなく、サーバからページを要求することを強制され、その結果、サーバ上のすべてのログインチェックが実行されます。これを行うには
フィルタ
を設定する
必要なレスポンスヘッダ
を設定します。
doFilter()
メソッドに追加します。
@WebFilter
public class NoCacheFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.
chain.doFilter(req, res);
}
// ...
}
これをマップする
Filter
を
url-pattern
のような、興味のある
*.jsp
.
@WebFilter("*.jsp")
また、保護されたページのみに制限をかけたい場合は、保護されたページすべてをカバーするURLパターンを指定する必要があります。例えば、すべてのページがフォルダ
/app
という URL パターンを指定する必要があります。
/app/*
.
@WebFilter("/app/*")
さらに言えば、この作業を同じ
Filter
の中で行うことができます。
テスト前にブラウザのキャッシュをクリアするのを忘れないでください!;)
こちらもご覧ください。
関連
-
[解決済み] javax.faces.application.ViewExpiredException: ビューを復元できませんでした
-
Serious: End event threw exception java.lang.reflect.InvocationTargetException at sun.reflect.GeneratedM
-
java オープンソースフレームワーク統合 Context initialization failed の共通エラー。
-
[解決済み] JSPページでサーブレットを呼び出す方法
-
[解決済み】Storyboardのログイン画面のベストプラクティス、ログアウト時のデータクリアの処理について
-
[解決済み] クッキーとセッションの違い?
-
[解決済み] 別のJSPファイルをインクルードする
-
[解決済み] RequestDispatcher.forward()とHttpServletResponse.sendRedirect()の比較
-
[解決済み] JSP EL、JSF EL、Unified ELの違い【終了しました
-
[解決済み] ELで定数を参照するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
java オープンソースフレームワーク統合 Context initialization failed の共通エラー。
-
[解決済み] JSPページでサーブレットを呼び出す方法
-
[解決済み] JSTLでのif-elseオプションの使用方法
-
[解決済み] クッキーとセッションの違い?
-
[解決済み] JSTLをインストールするには?絶対 URI: http://java.sun.com/jstl/core は解決できません。
-
[解決済み] 別のJSPファイルをインクルードする
-
[解決済み] RequestDispatcher.forward()とHttpServletResponse.sendRedirect()の比較
-
[解決済み] JSP EL、JSF EL、Unified ELの違い【終了しました
-
[解決済み] jsp の出力から空白を取り除く
-
[解決済み] ELで定数を参照するには?