登录后登录和会话页面后阻止用户返回登录表单?

时间:2014-04-09 15:13:56

标签: java jsp servlets servlet-filters

我正在用Java开发一个需要用户登录和注销的应用程序。我想阻止用户返回:

  1. 登录后登录页面
  2. 注销后的会话页面
  3. 我已经看过StackOverflow上的一些问题,它们分别回答了这些问题,我不知道是否要为它们实现单独的过滤器?

    另外,我应该使用会话检查或会话页面的非缓存吗?

    有人可以提供此问题的代码示例吗?

    谢谢

2 个答案:

答案 0 :(得分:0)

post post技术后重定向可以防止在浏览器中返回。 请记住,这只是客户端浏览器的视觉效果,而不是安全功能,以避免用户返回安全页面!

链接: http://en.wikipedia.org/wiki/Post/Redirect/Get

http://theopentutorials.com/tutorials/java/design-patterns/post-redirect-get-prg-pattern-in-servlet-jsp/

Back Button behaviour after Post-Redirect-Get

答案 1 :(得分:0)

我最终使用了这段代码,似乎运作良好。

public class SessionFilter implements Filter {

/**
 * Default constructor.
 */
public SessionFilter() {
}

/**
 * @see Filter#destroy()
 */
public void destroy() {
}

/**
 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
 */
public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {

    HttpServletRequest hRequest = (HttpServletRequest) request;
    HttpServletResponse hResponse = (HttpServletResponse) response;
    HttpSession session = hRequest.getSession(false); // returns existing or
                                                        // null

    if (session == null || session.getAttribute("user_email") == null) {
        hResponse.sendRedirect(hRequest.getContextPath() + "/login.jsp");
        // return;
    } else {
        hResponse.setHeader("Cache-Control",
                "no-cache, no-store, must-revalidate"); // HTTP 1.1.
        hResponse.setHeader("Pragma", "no-cache"); // HTTP 1.0.
        hResponse.setDateHeader("Expires", 0);
        chain.doFilter(request, response);
    }


}

/**
 * @see Filter#init(FilterConfig)
 */
public void init(FilterConfig fConfig) throws ServletException {
    // TODO Auto-generated method stub
}

}