2013-02-10 76 views
0

我隱藏了一些鏈接在我的webapp取決於用戶角色...現在,例如我隱藏鏈接sample.jsp在我的用戶角色等於1. Ofcourse這將隱藏,但如果此用戶知道他可以鏈接最終去那個鏈接...如何配置這個?如何在JSP Web應用程序中保護鏈接?

+0

使用java腳本或jquery – 2013-02-10 13:13:07

+4

@ShahidGhafoor - 你*不能*使用客戶端代碼來保護任何東西。客戶端代碼可以由訪問者更改! – Quentin 2013-02-10 13:18:10

+0

@Quentin同意了!但達到一定程度。 – 2013-02-10 13:29:08

回答

2

當有人訪問該鏈接指向的URL時,檢查它們是否已通過身份驗證(如果沒有,則向他們顯示登錄頁面),並且如果他們被授權訪問該頁面的用戶被授權訪問該頁面(如果沒有,則顯示他們一個錯誤消息解釋並給他們「以不同的用戶登錄」的形式)。

1

昆汀建議應該做的,它可能是不夠的,如果你正在開發一個演示應用程序,

但如果你是認真的在實現一個強大的身份驗證和授權,那麼你應該認真地給一個念頭在學習任何開源安全框架。

這可以節省很多頭痛,特別是如果您的自定義爲您的應用程序構建安全性。

0

首先,選擇一個安全框架,吸引你,如Apache四郎或Spring Security的建議,由Sudhakar。要了解不同的安全框架,您可能會喜歡Matt Raible在2011年的概述:Spring SecurityApache Shiro等等。

接下來,如果您選擇了安全框架,那麼您應該可以非常簡單地關注Quentin的答案。

非常基本方案將網頁到基於角色的邏輯組(你shiuld有幾個):例如,與路徑/admin/users/edit(和admin/...)頁面將着眼於人的作用管理員,/user/order/view(和user/...)對於註冊用戶等都是可見的。如果您想爲特定用戶角色提供頁面部分,則需要更高級的設置,例如兩個管理員都可以訪問/user/edit,但只有當前用戶的角色等於管理員時纔會呈現按鈕刪除。爲了更多地保護應用程序,您選擇的框架應該提供一種基於用戶角色來保護業務邏輯方法的方法。如果您選擇Shiro,可能還會有一些特殊標籤來簡化視圖創建,如<shiro:hasRole>

但是,您的情況的基本解決方案是<h:link rendered="#{currentUser.roleOne}"/>與後盾bean方法public boolean isRoleOne() { return role.equals("1"); }。當然,它只會隱藏鏈接,但用戶仍然可以通過它的URL訪問該頁面。所以,最終你最終會寫一個Filter的樣板代碼,或者使用一個公認的安全框架提出的解決方案。