簡體   English   中英

Xhtml頁面和HttpSession測試,沒有jstl嗎?

[英]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-patternweb.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.

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