在GlassFish中為Web應用程序設置用戶訪問權限
在實際應用中GlassFish,我們可能會把用戶、權限、角色之類的寫在數據庫中,用程序對用戶訪問權限加以控制,也可能會用到Spring AOP的Interceptor來攔截非法訪問,但是可能會存在一個問題,如果將超級管理員的用戶名和密碼寫在數據庫,萬一不小心把超級管理員的用戶或角色刪掉,怎么辦?因此讓應用服務器來托管管理員(或其他特殊角色),不但可以避免這個問題,而且也簡化了應用程序的用戶權限控制(你不必因為害怕普通用戶非法訪問管理員的訪問域而費盡心思使用代碼或AOP來控制),而且GlassFish應用服務器在安全性方面很有保證,大大提高了應用程序的安全性。
實驗環(huán)境:
1、Netbeans 6.1中文版,JDK1.6以上
2、GlassFish V2或Sun Application Server
實驗步驟:
1、創(chuàng)建Web應用程序,命名為WebApplicationSecurity,在創(chuàng)建過程中保持默認選項即可,不需要選擇其他框架。
2、在WEB頁 目錄下創(chuàng)建兩個文件夾(新建-其他-其他-文件夾),分別命名為secureAdmin和secureUser,一個是管理員的訪問域,一個是普通用戶的訪問域。接下來將嚴格控制管理員和普通用戶的訪問權限,普通用戶只能訪問secureUser目錄下的頁面,而管理員則兩個都可以訪問。
3、在secureAdmin目錄下創(chuàng)建一個名為pageA的HTML文件,同樣的,在secureUser下創(chuàng)建一個名為pageU的HTML文件內容如下:
|
4、在WEB頁目錄下創(chuàng)建主頁index.jsp,將標簽中的內容覆蓋為:
5、在GlassFish中添加用戶權限。
首先,展開服務-服務器,選擇GlassFish V2,右鍵-啟動。(如果沒看到有GlassFish,請安裝后點擊“添加”)。
然后,打開瀏覽器,輸入網址http://localhost:4848訪問GlassFish的管理員平臺,默認用戶是admin,密碼是adminadmin。
接下來,展開 配置-安全性-領域,選擇file。在主窗口打開的頁面中,點擊“管理用戶”按鈕,進入用戶管理頁面,點擊新建,創(chuàng)建一個管理員用戶,用戶名為admin,密碼也是admin。同樣地,創(chuàng)建一個用戶user,密碼是user。
至此,GlassFish下的用戶權限已經配置完畢,接下來,我們需要在應用程序的配置文件中添加一些配置來使用這兩個用戶。
6、打開WEB-INF目錄下的web.xml,點擊“安全”選項卡,展開“登陸配置”,選擇“基本”,在“域名稱”中填入 file。展開“安全角色”,點擊“添加”,“角色名稱”中填入Admin,同樣的方法,添加一個角色名稱為User的角色。在“安全約束”選項下,點擊“添加安全約束”,“顯示名稱”中填入AdminConstraint,在“Web資源集合”選項下點擊“添加”,“資源名稱”為Admin,URL模式為“/secureAdmin/*”,表示Admin這個資源集合映射到secureAdmin下的任何頁面,如下圖所示:
選中“啟用驗證約束”,編輯“角色名稱”,將Admin添加到右邊的框中。同樣,創(chuàng)建一個顯示名為UserConstraint的安全約束,資源集合中的資源名稱為User,URL模式為/secureUser/*。注意角色名稱應該Admin和User都選擇(管理員和普通用戶均可進入)。
7、最后,在sun-web.xml中添加WEB應用定義的安全資源與GlassFish上的用戶的映射。打開WEB-INF下的sun-web.xml,點擊“安全”選項卡,點擊“添加安全角色映射”,在“安全角色名”中填入Admin,添加主要用戶,主要用戶名稱為admin。同樣,創(chuàng)建一個名為User的安全角色,并添加主要用戶名為user的主要用戶,如下圖所示:
8、部署,運行項目,點擊管理員頁面,如果用admin來登陸,將跳轉到pageA頁面,如果用user來登陸,則遭到攔截。如果你不希望使用“基本認證”來接受用戶輸入,你也可以自己寫一個表單來接受用戶輸入:
|
在web.xml的安全選項中的登陸配置里選中“窗體”,然后選擇登陸頁面和登陸錯誤的頁面即可。
【編輯推薦】