天天看點

自己動手實作簡單權限控制

 最近接手一小型私活,使用者量封頂上千,工期預期的也相對寬松,權限控制當然是必不可少。

   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,如需轉載請自行聯系原作者