0

使用:Mojarra 2.15、jsf 2.0、Jboss 7.1

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

  • 如果当前页面是index.html 并且会话已过期,则让用户输入 username/pwd 并单击确定按钮并重定向到另一个 page.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);
}
4

2 回答 2

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().createdelete ....

protected Session getSessionFactory() { // Accessible que par les classes
                                        // filles
    session = HibernateUtil.getSessionFactory().getCurrentSession();
    if(!session.getTransaction().isActive())
        session.beginTransaction();
    return session;
}
于 2013-07-12T14:30:21.133 回答
0

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

于 2013-07-12T18:34:30.333 回答