私は現在、ログインを持つアプリを開発しています。ユーザーがログインした後、ログインページを履歴から削除して、(ログイン後に) [戻る] ボタンを選択してもログインページに戻らないようにしたいのですが、前のページには戻りません。それ。
javascript でのコードはlocation.replace('whatever_url_you_are_forwarding_to');
Java/JSF で同等のものを知りたい
私は現在、ログインを持つアプリを開発しています。ユーザーがログインした後、ログインページを履歴から削除して、(ログイン後に) [戻る] ボタンを選択してもログインページに戻らないようにしたいのですが、前のページには戻りません。それ。
javascript でのコードはlocation.replace('whatever_url_you_are_forwarding_to');
Java/JSF で同等のものを知りたい
これは次の方法で解決できます。
ログインページをキャッシュしないようにブラウザに指示します。これにより、ブラウザのキャッシュからロードするのではなく、常に十分な価値のあるGETリクエストが送信されます。
ユーザーがすでにログインしているときにログインページが要求されたら、目的のページ(ユーザーがログインしたときにセッションで覚えている)へのリダイレクトを送信します。
これは、1つの同じフィルターで実行できます(ただし、個人的には、変更の影響を受けやすいすべての動的ページでブラウザーキャッシュを無効にしたいので、それらのページをカバーするより一般的なURLパターンで別のフィルターで実行します)。
コンテナ管理認証を使用していると仮定した場合のキックオフの例を次に示します(ユーザーを手動でセッションに参加させる自家製認証の場合は、代わりにセッション属性の存在を確認してください)。
@WebFilter("/login.xhtml")
public class LoginPageFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession();
// Tell browser to not cache this page.
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.
// Check if user is logged in.
if (request.getRemoteUser() == null) {
// Not logged in, so remember previous URL and continue request.
session.setAttribute("referrer", request.getHeader("referer")); // Yes, the misspelling is "correct"!
chain.doFilter(request, response);
}
else {
// Logged in, so redirect to initial referring URL, if any.
String referrer = (String) session.getAttribute("referrer");
if (referrer != null) {
response.sendRedirect(referrer);
}
else {
// There was no referring page. Just continue request?
chain.doFilter(request, response);
}
}
}
// ...
}
サーバー側の Java コードがクライアント側のブラウザーの履歴を変更する方法はありません。ブラウザーの履歴をいじるつもりはありません。ユーザーは、戻るボタンに対して一貫した予測可能な動作を期待しています。ログイン ページに戻りたい場合は、ログイン ページに戻らせます。