權限管理分析
每個網站都涉及到訪問權限的控制。每個站點資源都需要被管理起來,用戶只有具有訪問某個資源的特定權限,才能夠訪問,否則拒絕訪問。網站的訪問權限控制,一種方法從 URI 入手,站點的每個資源都用唯一的 URI 描述,我們為想要管理起來的 URI 增加上權限屬性,當用戶訪問資源時我們要先檢查用戶是否具有權限。采用過濾器技術實現權限攔截,進行判斷,有權限即可訪問,沒有就阻止。另一種方法是采用入口有無的形式來做,根據后台數據判斷有權限則界面有權限入口,沒有權限則沒有入口
權限數據庫設計
數據庫采用如下設計,總共由5張表組成,用戶表、角色表、資源表、用戶角色表和角色資源表。一個用戶可以擁有多個角色,一個角色擁有多個資源。

1 CREATE TABLE `user` ( 2 `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', 3 `username` varchar(32) DEFAULT NULL COMMENT '用戶名', 4 `password` varchar(32) DEFAULT NULL COMMENT '密碼', 5 PRIMARY KEY (`id`) 6 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶表'; 7 8 CREATE TABLE `role` ( 9 `id` int(11) NOT NULL AUTO_INCREMENT, 10 `name` varchar(32) DEFAULT NULL COMMENT '角色名', 11 `desc` varchar(32) DEFAULT NULL COMMENT '角色描述', 12 PRIMARY KEY (`id`) 13 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='角色表'; 14 15 CREATE TABLE `resource` ( 16 `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', 17 `title` varchar(32) DEFAULT NULL COMMENT '資源標題', 18 `uri` varchar(32) DEFAULT NULL COMMENT '資源uri ', 19 PRIMARY KEY (`id`) 20 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='資源表'; 21 22 CREATE TABLE `user_role` ( 23 `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', 24 `user_id` int(11) NOT NULL COMMENT '用戶id', 25 `role_id` int(11) NOT NULL COMMENT '角色id', 26 PRIMARY KEY (`id`) 27 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶角色表'; 28 29 CREATE TABLE `role_resource` ( 30 `id` int(11) NOT NULL AUTO_INCREMENT, 31 `role_id` int(11) DEFAULT NULL COMMENT '角色id', 32 `resource_id` int(11) DEFAULT NULL COMMENT '資源id', 33 PRIMARY KEY (`id`) 34 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='角色資源表';
攔截器控制權限
界面通過url進行請求,由攔截器進行攔截,根據用戶的信息,去數據庫中查詢此用戶是否具有本次請求了url權限,如果有就通過請求,讓他訪問資源,如果沒有就返回,提示用戶不具有該資源的反問權限
控制入口控制權限
- 比如后台的菜單按鈕,沒一個按鈕對應的是一個資源。在顯示按鈕的時候,可以通過后台先查詢此用戶具有那些資源,然后根據資源可以對應的像是這些按鈕。此方法可以做到按鈕級別的權限控制。
- web網頁,還可以同過自定義標簽來實現入口的控制。自定義標簽參照:【JSP】自定義標簽開發入門
如:<diy:power value="${url}"><a>權限按鈕</a></diy:power>
此標簽根據value,在后台查詢數據庫去判斷是否具有權限,覺得標簽內容是否顯示