JSP中的会话无效 - Servlet

时间:2011-11-04 17:21:07

标签: java jsp servlets

  

可能重复:
  Prevent user from going back to the previous secured page after logout

我想知道如何使JSP和servlet中的会话无效。在我的网站中,一个人在注销时到达登录页面但在点击后退按钮时他可以访问上一页。我无法理解将session.invalidate()

放在何处

当我点击登出时,在login.jsp或我的其他网页上,我应该在哪里使其无效。

我的过滤器类: -

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import javax.servlet.annotation.WebFilter;


public class LoginFilter implements Filter{


        @Override
        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("currentSessionUser") == null) {
                response.sendRedirect("Loginpage.jsp"); // No logged-in user found, so redirect to login page.

                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);
            } else {
                chain.doFilter(req, res); // Logged-in user found, so just continue request.
            }
        }

}

在web.xml中,我写过: -

 <filter>
        <filter-name>loginFilter</filter-name>
        <filter-class>LoginFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>loginFilter</filter-name>
        <url-pattern>/ARMS/*</url-pattern>
    </filter-mapping>

在我的Loginpage.jsp上,我刚刚写了

<%
session.invalidate();
%>

可以吗?其次我不清楚目录结构。我正在拍摄它的屏幕截图.. enter image description here enter image description here

我正在使用apache tomcat 5.5服务器,所以我想我不应该在过滤器类中添加url-pattern注释吗?因为它仅在tomcat 7及以上版本中受支持。

2 个答案:

答案 0 :(得分:0)

在servlet或用户点击“注销”时转到的JSP中使会话无效。 粗略地说,您可以检查用户所访问的每个页面上是否存在会话。

看看这个帖子,它有一些你正在寻找的答案。

http://forums.devx.com/showthread.php?t=146975

答案 1 :(得分:0)

我使用servlet仅用于注销。当用户点击退出按钮时,它会将它们指向该页面,该页面又会检查活动会话,如果找到,则调用session.invalidate(),然后将用户重定向回主页(或任何您想要的位置) )。

HttpSession session = request.getSession(false);

if(session != null){
    session.invalidate();
    RequestDispatcher rd = request.getRequestDispatcher("Loginpage.jsp");
    rd.forward(request, response);
} else {
    //There is no session. Redirect somewhere
}

这只是一个简单的例子。