ブラウザの戻るボタンまたは履歴を無効にすることはできますが、無効にしないでください。これはユーザーエクスペリエンスに悪影響を及ぼします。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
、ログインしたユーザーの存在を確認するのと同じ方法でこのジョブを実行できます。
テストする前にブラウザのキャッシュをクリアすることを忘れないでください!;)
参照: