私は Java EE と JSF の初心者です。ログインシステムを作成しようとしていますが、ユーザーがログアウトしたときに戻るボタンに問題があります。これに対処するために、stackoverflow で見つけた他のいくつかのトピックで提案されているようにフィルターを作成しました。次のようになります。
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse hsr = (HttpServletResponse) res;
hsr.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
hsr.setHeader("Pragma", "no-cache");
hsr.setDateHeader("Expires", 0);
chain.doFilter(req, res);
}
現在、ページはキャッシュされていません。各ページでは、次のような認証機能と呼ばれます。
public void authenticate(ComponentSystemEvent event) {
if(!userName.equals("Admin")) {
FacesContext context = FacesContext.getCurrentInstance();
ConfigurableNavigationHandler navHandler = (ConfigurableNavigationHandler)
context.getApplication().getNavigationHandler();
navHandler.performNavigation("/root/start");
}
}
そのため、管理者がアプリケーションにログインしていない場合、ログイン ページにリダイレクトされます (今のところ、管理者と呼ばれる 1 人のユーザーだけで動作する場合は十分です)。
問題は、管理者がログアウトして [戻る] ボタンを使用すると、期限切れの Web ページに関する情報を含むブラウザー固有の Web ページが表示されることです。現時点では 2 つのケースがあります。
1)ユーザーがログインし、更新を押すと、ページが正常に表示されます。
2) ユーザーがログアウトされ、更新を押すか戻るボタンを再度使用すると、 javax.faces.application.ViewExpiredExceptionがスローされ、ユーザーはログイン ページ (/root/start - web.xml で構成) にリダイレクトされます。 )。
私がやりたいことは、期限切れのWebページに関するブラウザ情報をスキップすることです-ログアウトしたユーザーは、戻るボタンを使用した直後にログインページにリダイレクトする必要があり、ログインしたユーザーは、期限切れのページについて警告されることなく通常どおり戻るボタンを使用できます. 初心者が実装できるソリューションはありますか (存在する場合)?