[英]Xhtml pages and HttpSession test , no jstl?
我在Java EE中有一個帶有JSF,Facelets,Richfaces的動態Web應用程序。 我的頁面都是xhtml頁面。 因此,JSTL無法使用。 為了使我的帳戶頁面和所有其他私有頁面都可以訪問,我想測試用戶是否已連接,因此,如果HttpSession
的屬性會話不為null。 如果為null,則會在歡迎頁面中重定向用戶。
我在xhtml頁面中嘗試過:
<jstl:if test="${sessionScope['session']==null}">
<jstl redirect...>
</jstl:if>-->
但由於它不是jsp頁面,因此無法使用。 因此,我應該在哪里測試會話是否不為null以允許用戶查看其私人頁面? 在中央托管bean中?
正常的位置是Filter
。
創建一個implements
javax.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);
}
將這個過濾器映射到類似/private/*
, /secured/*
, /restricted/*
等的url-pattern
的web.xml
。
<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
本身即已是會話。 對於其他開發人員檢查/維護您的代碼,這將變得過於模棱兩可且令人困惑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.