最近接手一小型私活,使用者量封頂上千,工期預期的也相對寬松,權限控制當然是必不可少。
web 權限控制,很多項目會引入 shiro/spring-security。
shiro/spring-security 繼承 servlet-->filter抽象接口,運用合适的設計模式,
通過攔截用戶端請求,來實作各個角色對系統資源的通路權限。
一時興起,有了自己實作權限控制的想法,遂有此文,如果你用膩了 shiro/spring-security,不妨來和我一起完善它。
本文隻做抛磚引玉之用,重點在思路,具體項目具體程式設計語言請自行拿捏。
Shiro 中定義攔截過濾鍊,可以很簡單實作上圖中的想法,像下面這種姿勢(但咱的目的是自己動手)。
想法大緻和 shiro/spring-security 相同,實作 Filter 接口攔截用戶端的對應請求。
比較有意思的部分,首先你得确定該 Filter 需要攔截什麼的請求,服務? 靜态頁面 ? 互動腳本?網頁樣式?圖檔?
當然項目需要有良好的命名規範,無論是 restful 風格或傳統風格。規範項目中的請求 URL 或添加特定的字尾。web.xml 配置比如像下面。
其次你需要确定該本次請求是否有通路該資源的權限,我項目中确定邏輯比較簡單,畢竟千人系統。
将登入頁面和登入請求做為 FreeService ,也就是暴露在系統外的資源,登入時在 Session 中放置對應登入對象 PO。
既友善系統内的相應展示,也可做為使用者是否登入的憑證,比如登入服務邏輯像下面。
當然也可以引入資料庫設計,劃分使用者角色來制定詳細的通路政策。
最後繼承 Filter 接口攔截每次用戶端請求,來決定是否能擷取到對應的系統資源。
defaultPage 為權限不足時預設跳轉的頁面,比如 Filter doFilter方法邏輯像下面。
到此,整個設計思路已叙述清楚,隻需自己實作一個 Filter 即可,騷年是不是很簡單?
個人認為其中的可擴充點還很多,做通用并且好用還是有難度的,比如詳細的角色通路政策,制定合理的設計模式。
本文轉自Orson部落格園部落格,原文連結:http://www.cnblogs.com/java-class/p/6344191.html,如需轉載請自行聯系原作者