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