如何识别会话是否已过期以及当前页面

时间:2013-07-12 13:28:06

标签: java http jsf session servlets

使用:Mojarra 2.15,jsf 2.0,Jboss 7.1

嗨,我试图在doFilter方法会话中实现过期,但是:

  • 如果当前页面是 index.html且会话已过期,则让用户输入username / pwd并单击“确定”按钮并重定向到另一个页面。xhtml

问题是当用户输入用户名/密码和确认按钮时,我得到了会话过期页面,而不是转到右页。

if (httpServletRequest.getRequestedSessionId() != null && !httpServletRequest.isRequestedSessionIdValid()) {
                session = httpServletRequest.getSession(true);
                session.setAttribute("logedin", "0");    // public user               
{

   if(httpServletRequest.getRequestURL().toString().contains("index.xhtml"))
   {
        httpServletResponse.sendRedirect(loginPage);
   }else
   {
         httpServletResponse.sendRedirect(timeoutPage);
   }
} else {
    request.setCharacterEncoding("UTF-8");
    chain.doFilter(httpServletRequest, httpServletResponse);
}

2 个答案:

答案 0 :(得分:1)

当您正在使用JSF时,我建议您使用过滤器: Servlet Filter not working

response.sendRedirect //包含相对路径

关于do过滤器:我假设你在登录方法中设置了USER对象属性

public void doFilter(ServletRequest req, ServletResponse res,
        FilterChain chain) throws ServletException, IOException {

      HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;
        HttpSession session = request.getSession();

        if (session == null || session.getAttribute("User") == null) {
              response.sendRedirect(request.getContextPath() + "/index.xhtml"); // No logged-in user found, so redirect to login page.
        } else {
            chain.doFilter(req, res); // Logged-in user found, so just continue request.
        }
}

Hibernate Authentification:我遇到了同样的问题,我通过检查会话是否仍然可用来修复它。然后当我想使用DB时,我只需要调用 getSessionFactory()。create delete ....

protected Session getSessionFactory() { // Accessible que par les classes
                                        // filles
    session = HibernateUtil.getSessionFactory().getCurrentSession();
    if(!session.getTransaction().isActive())
        session.beginTransaction();
    return session;
}

答案 1 :(得分:0)

当用户对index.html和session的请求过期时,您的过滤器会将其发送到登录表单。用户输入user / pass并单击登录按钮。新请求发送到服务器。 您的过滤器检查条件。会话过期过滤器一次又一次地将用户发送到登录表单 在过滤器中,您最多为条件添加条件。如果请求从index.html收到并且会话已过期且请求中没有设置任何用户/传递,或者用户/传递不正确则返回hoto登录表单,否则转到page.xhtml。