2010-06-30 32 views
1

我在JSF,Facelets,Richfaces中使用Java EE中的動態Web應用程序。 我的頁面都是xhtml頁面。 所以JSTL不在其中。 對於我的賬戶頁面和所有其他私人頁面可以訪問,我想測試用戶是否已連接,因此如果HttpSession中的屬性會話不爲空。如果它爲空,用戶會在歡迎頁面中重定向。Xhtml頁面和HttpSession測試,沒有jstl?

我想在我的XHTML頁面:

<jstl:if test="${sessionScope['session']==null}"> 
<jstl redirect...> 
</jstl:if>--> 

,但因爲它不是JSP頁面將無法正常工作。那麼我應該在哪裏測試會話是否爲空以允許用戶看到他的私人頁面? 在一箇中央託管bean?

回答

3

正常的地方是Filter

創建一類implementsjavax.servlet.Filter並在doFilter()方法寫以下邏輯:

if (((HttpServletRequest) request).getSession().getAttribute("user") == null) { 
    // Not logged in, so redirect request to login page. 
    ((HttpServletResponse) response).sendRedirect("/login.jsf"); 
} else { 
    // Logged in, so just continue request. 
    chain.doFilter(request, response); 
} 

地圖這個濾波器在web.xml上的類似/private/*/secured/*/restricted/*一個url-pattern

<filter> 
    <filter-name>loginFilter</filter-name> 
    <filter-class>com.example.LoginFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>loginFilter</filter-name> 
    <url-pattern>/private/*</url-pattern> 
</filter-mapping> 

如果您在/private文件夾中有專用頁面,則將調用此過濾器並相應地處理會話中登錄用戶的存在。

請注意,我將屬性名稱session更名爲user,因爲這樣做更有意義。 HttpSession本身已經是會議。對於其他開發人員檢查/維護您的代碼而言,這會讓人覺得太模棱兩可,讓人感到困惑。

+0

非常感謝你...... 我們已經建議各私人頁面上做: 但我喜歡你的方法無論如何,易於維護和更通用的,謝謝... – KitAndKat 2010-06-30 20:38:41