如何避免按钮或链接点击页面过期。当我为表单上的任何按钮点击或链接返回null时页面到期

时间:2012-04-19 06:06:42

标签: jsf-2

我正在使用过滤器检查用户是否登录,然后不缓存上一页。这个代码就像,

public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
        throws IOException, ServletException {
    ....
    if (isRegisteredUser.equalsIgnoreCase(("1"))) {

        sessionID = UUID.randomUUID().toString();

        session.setMaxInactiveInterval(1800); 

        Cookie userCookie = new Cookie("userCookie", "loginUser");
        userCookie.setPath("/");
        httpServletResponse.addCookie(userCookie);

        Cookie sessionCookie = new Cookie("WITSessionCookie", sessionID);
        sessionCookie.setMaxAge(60*30);  
        sessionCookie.setPath("/");    
        httpServletResponse.addCookie(sessionCookie);

        if (!httpServletRequest.getRequestURI().startsWith(httpServletRequest.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)) { // Skip JSF resources (CSS/JS/Images/etc)
            httpServletResponse.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
            httpServletResponse.setHeader("Pragma", "no-cache"); // HTTP 1.0.
            httpServletResponse.setDateHeader("Expires", 0); // Proxies.
        }

        filterChain.doFilter(httpServletRequest, httpServletResponse);

    }
    ...

} //end of doFilter()

但问题是,如果在任何页面上用户点击任何按钮或链接,我为该操作返回null,然后我点击浏览器后退按钮,然后它说页面过期。 如何防止这种情况?很好,页面没有缓存,但当我点击任何按钮或任何链接并为该操作返回null时,为什么它会使我的页面到期?< /强>
感谢

1 个答案:

答案 0 :(得分:0)

当最终用户尝试重新发送未在浏览器中缓存的POST请求时,这是正常和指定的行为。您需要实现post-redirect-get模式。在操作方法中将重定向发送到目标页面。或者,更好的是,将它改为ajax。顺便说一句,无论您是否通过返回null返回到同一视图。