如果我关闭浏览器而不会使会话无效,那么我不希望它再次登录而无法访问我的应用程序。
并且不希望我的用户使用后退按钮评估受限用户页面。
我如何在JSF 2.0中执行此操作?
答案 0 :(得分:2)
如果浏览器关闭而不会使当前会话无效,如何使jsf 2.0中的会话无效。
您无法以可靠的方式以编程方式执行此操作。然而,会话将在30分钟后自动失效。如果您打开一个新浏览器,则将创建一个新会话,并且将无法再访问上一个会话。
并且不希望我的用户使用后退按钮评估受限制的用户页面。
您需要指示浏览器不缓存这些受限制的用户页面。您可以通过创建filter来实现此目的,该{{3}}映射到覆盖这些页面的URL模式,并在doFilter()
方法中执行以下作业:
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpReq = (HttpServletRequest) request;
HttpServletResponse httpRes = (HttpServletResponse) response;
if (!httpReq.getRequestURI().startsWith(httpReq.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)) { // Skip JSF resources (CSS/JS/Images/etc)
httpRes.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
httpRes.setHeader("Pragma", "no-cache"); // HTTP 1.0.
httpRes.setDateHeader("Expires", 0); // Proxies.
}
chain.doFilter(request, response);
}
这样,浏览器每次都被迫发送一个完整的HTTP请求,而不是从浏览器缓存中显示该页面。