0

这是我的过滤器代码,下面是doPost()我的 servlet 中的方法。我正在尝试实现注销功能。单击注销按钮时,控制权被发送到 servlet,然后重定向到我的登录页面。但是,我有一个问题。浏览器显示页面未正确重定向。我一直在讨论关于这个主题的所有问题,但似乎没有什么能帮助我。我也有后退按钮问题,即使在注销后也会将用户带回页面。有人可以解释我做错了什么吗?

注销过滤器.java

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;

    HttpSession session = request.getSession(false);         
     if (session == null || session.getAttribute("loginUsername") == null) {
    response.sendRedirect("login.jsp"); // No logged-in user found, so redirect to login page.
} else {
    response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
    response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
    response.setDateHeader("Expires", 0);
    chain.doFilter(req, res);  
}
}

LogoutServlet.java

protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            request.getSession().invalidate();
            RequestDispatcher rd = request.getRequestDispatcher("login.jsp");
            rd.forward(request, response);

}

编辑:另外,当我从我的项目中输入一个页面的随机 url 时,它会显示而无需用户登录。怎么做才能避免这种情况发生?

更新:我通过使用一些验证并相应地重定向到登录页面解决了随机 url 页面显示问题。注销功能正在运行。但是,当我按下后退按钮时,它会重定向到登录页面本身(根据需要),但是,再按一次后退按钮,浏览器会显示Document Expired消息,如果我按下刷新,安全页面会再次显示。谁能告诉我这里可能是什么问题?

4

1 回答 1

0

看起来您已经在 servlet 中实现了重定向逻辑Filter。这将取决于您的过滤器映射,如果doFilter每次login.jsp收到请求时都会触发重定向循环。
因此解决方案是以这样一种方式对过滤器进行 url 映射,即如果 URL 与login.jsp.
或者您可以检查是否login.jsp在过滤器逻辑本身中被击中。例如:

boolean isLogin = req.getRequestURI().contains("/login.jsp");
if (!isLogout && (session == null || session.getAttribute("loginUsername") == null)) {
   ...
于 2013-10-23T07:32:02.403 回答