[英]How to identify if session has expired and current page
使用:Mojarra 2.15,jsf 2.0,Jboss 7.1
您好,我正在嘗試在doFilter方法會話中實施,但已過期:
問題是當用戶鍵入用戶名/ 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()。create或delete ....
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.