我是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);
}
现在页面没有缓存。在每个页面上称为authenticate函数,如下所示:
public void authenticate(ComponentSystemEvent event) {
if(!userName.equals("Admin")) {
FacesContext context = FacesContext.getCurrentInstance();
ConfigurableNavigationHandler navHandler = (ConfigurableNavigationHandler)
context.getApplication().getNavigationHandler();
navHandler.performNavigation("/root/start");
}
}
因此,当管理员未登录时,应用程序会将我重定向到登录页面(现在只有一个名为admin的用户才能使用它。)
问题是当管理员退出并使用后退按钮时,有一个浏览器特定的网页,其中包含有关过期网页的信息,目前有2种情况:
1)用户登录后,当他点击刷新时,页面正常显示。
2)用户注销,当他点击刷新或再次使用后退按钮时会抛出 javax.faces.application.ViewExpiredException ,然后用户将被重定向到登录页面(/ root /开始 - 我在我的web.xml中配置它。)
我想要做的就是跳过有关过期网页的浏览器信息 - 注销用户必须在使用后退按钮后立即重定向到登录页面,并且登录用户可以正常使用后退按钮而不会被警告过期页面。 begginier可以实现的任何解决方案(如果存在)?