簡體   English   中英

在xhtml JSF中檢查會話訪問

[英]Checking Session Access in xhtml JSF

我正在建立一個資產管理系統。系統中有三類用戶,管理員,子管理員和受限用戶。管理員可以執行任何操作,子管理員僅用於驗證數據,受限用戶只能查看完成的數據/查看數據

在數據庫中, 訪問權限的編號為number.Administrator = 0,SubAdmin = 1,受限用戶= 2。

要進入系統,每個用戶必須登錄,在登錄時,將訪問權限保存到會話中。 問題,如何檢查servlet文件(.xhtml)中的會話? 例如,數據表中有數據。 有菜單“編輯”,“刪除”和“驗證”。 如果admin已登錄,則菜單行中將出現“編輯,刪除”菜單,如果SubAdmin已登錄,則僅會出現菜單“ verify”,如果受限用戶已登錄,則不會出現該菜單。

我應該檢查該文件中的servletnya會話,還是還有另一種方法? 怎么樣 ?

非常感謝..

首先,XHTML文件不是Servlet文件。 這是Facelets文件。 Facelets是一種基於XML的視圖技術。

至於您的具體問題,只需在JSF組件的rendered屬性中確定即可。 如果布爾條件評估為false ,則JSF不會渲染該組件(也不會在提交時對其進行處理,因此您也可以避免被篡改的請求)。

假設已登錄的用戶是User范圍內的User javabean,在EL范圍內可以使用#{user} ,並且具有hasRole()方法(采用String並返回boolean ,那么您可以這樣做:

<h:commandButton value="delete" rendered="#{user.hasRole('admin')}" />

有很多變化,例如只有一個isAdmin()方法返回boolean

<h:commandButton value="delete" rendered="#{user.admin}" />

或者讓getRoles()方法返回Collection

<h:commandButton value="delete" rendered="#{user.roles.contains('admin')}" />

如果有必要,您還可以使用整數0代替字符串admin ,但是這種情況很少自我記錄。

也可以看看:


但是請注意,您基本上是在進行內部授權。 您還可以考慮使用Java EE內置容器管理的認證和授權。 然后,您可以使用HttpServletRequest#isUserInRole()對用戶進行授權。 這很像User#hasRole()建議:

<h:commandButton value="delete" rendered="#{request.isUserInRole('admin')}" />

在Web應用程序中使用Spring Security時,借助特殊標簽可以輕松解決您的問題:

<sec:authorize ifAllGranted="ADMINISTRATOR">
    <h:commandButton value="edit" />
    <h:commandButton value="delete" />
</sec:authorize>
<sec:authorize ifNotGranted="SUBADMIN">
    <h:commandButton value="verify" />
</sec:authorize>

為此,只需添加頁面的名稱空間:

xmlns:sec="http://www.springframework.org/security/tags"

並將此連接到您的項目。

您還可以學習可以使用的Spring Security的其他有用的好處

暫無
暫無

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

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