簡體   English   中英

如何識別會話是否已過期和當前頁面

[英]How to identify if session has expired and current page

使用:Mojarra 2.15,jsf 2.0,Jboss 7.1

您好,我正在嘗試在doFilter方法會話中實施,但已過期:

  • 如果當前頁面是index.html並且會話已過期,則讓用戶鍵入username / pwd並單擊“確定”按鈕,然后將其重定向到另一個頁面。

問題是當用戶鍵入用戶名/ pwd和確定按鈕時,我得到了會話過期頁面而不是轉到正確的頁面。

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);
}

在使用JSF時,建議您使用filter: Servlet Filter不起作用

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身份驗證:通過檢查會話是否仍然可用,我解決了相同的問題。 然后,當我想使用數據庫時,我只需要調用getSessionFactory()。createdelete ....

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

當用戶對index.html和會話的請求過期時,您的過濾器會將其發送到登錄表單。 用戶輸入用戶名/密碼,然后單擊登錄按鈕。 新請求發送到服務器。 您的過濾器檢查條件。 會話過期過濾器使用戶一次又一次地登錄表單。
在過濾器中,您最多可以為條件添加一個條件。 如果來自index.html的請求已接收並且會話已過期,並且請求中未設置任何用戶/密碼或用戶/密碼不正確,則使用hoto登錄表單,否則轉到page.xhtml。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM