【一起來學shiro之一】初見shiro

博主最近的公司的大佬離職了。公司之前老的框架交給我來進行管理。然後最近在整理框架的時候發現公司老框架的權限部分還是使用的每次請求的時候都要去數據庫中查詢當前用戶的權限。感覺有點不太合理,所以最近準備使用shiro對框架進行一些小的修改。正好自己也不會shiro所以就一起來學習一下。

首先,我們在學習一個東西之前還是要了解三樣東西 爲什麼?是什麼?幹什麼?

換算到本片文章就是。

  • 爲什麼要學習 shiro?
  • shiro 是什麼?
  • 學習了shiro可以幹什麼?

ok!!接下來我們一起來學習shiro吧。

一、爲什麼要學習shiro?

首先我們要了解一下什麼是權限。權限通常就是每個用戶擁有的不同的權利。

通常權限又是和角色綁定的,而角色綁定權限。

比如 A用戶角色是管理員,他有刪除訂單&查看訂單的權限,那麼他就可以在訂單模塊查看訂單並且可以刪除訂單

而 B用戶角色是業務員,那麼他就只可以查看訂單而不可以刪除訂單

這就是所謂的權限。
權限示意圖

而權限通常數據庫設計是有以下幾張表:

  • 用戶表(用戶基本信息,如姓名、年齡、性別等信息)
  • 用戶角色表(用戶和角色的關聯表)
  • 角色表(角色信息表 如角色名稱、備註等)
  • 角色權限表(角色和權限的關聯表)
  • 權限表(權限表 如權限、備註、權限名稱)

數據庫示意圖

介紹完權限之後我們就可以介紹shiro了。

二、什麼是shiro?

shiro定義

Apache Shiro™是一個功能強大且易於使用的Java安全框架,它執行身份驗證授權加密會話管理。 使用Shiro易於理解的API,您可以快速輕鬆地保護任何應用程序-從最小的移動應用程序到最大的Web和企業應用程序。

從官方的定義我們可以很直觀的看出shiro主要是幫助我們快速實現

  • 身份驗證 驗證賬戶密碼、權限
  • 授權 授予用戶權限
  • 加密 對數據進行加密
  • 會話管理 shiro實現了一個類似一session的管理,所以shiro可以運行在非shiro的項目中

shiro的架構

shiro架構圖
下面的內容大概瞭解就好。我們會在學習的過程中更加深入的理解

  • Subject:主體,可以看到主體可以是任何可以與應用交互的 “用戶”,我們可以從subject中取得用的登陸狀態權限信息等;

  • SecurityManager:相當於 SpringMVC 中的 DispatcherServlet 或者 Struts2 中的 FilterDispatcher;是 Shiro 的心臟;所有具體的交互都通過 SecurityManager 進行控制;它管理着所有 Subject、且負責進行認證和授權會話緩存的管理。

  • Authenticator:認證器,負責主體認證的,這是一個擴展點,如果用戶覺得 Shiro 默認的不好,可以自定義實現;其需要認證策略(Authentication Strategy),即什麼情況下算用戶認證通過了

  • Authrizer:授權器,或者訪問控制器,用來決定主體是否有權限進行相應的操作;即控制着用戶能訪問應用中的哪些功能

  • Realm:可以有 1 個或多個 Realm,可以認爲是安全實體數據源,即用於獲取安全實體的;可以是 JDBC 實現,也可以是 LDAP 實現,或者內存實現等等;由用戶提供;注意:Shiro 不知道你的用戶 / 權限存儲在哪及以何種格式存儲;所以我們一般在應用中都需要實現自己的 Realm,總的來說realm就是具體去認證用戶信息是否正確&查詢用戶權限並且將用戶的權限告知shiro。允許用戶自己編寫實現方法

  • SessionManager:如果寫過 Servlet 就應該知道 Session 的概念,Session 呢需要有人去管理它的生命週期,這個組件就是 SessionManager;而 Shiro 並不僅僅可以用在 Web 環境,也可以用在如普通的 JavaSE 環境、EJB 等環境;所有呢,Shiro 就抽象了一個自己的 Session 來管理主體與應用之間交互的數據

  • SessionDAO:DAO 大家都用過,數據訪問對象,用於會話的 CRUD,比如我們想把 Session 保存到數據庫,那麼可以實現自己的 SessionDAO,通過如 JDBC 寫到數據庫;比如想把 Session 放到 Memcached 中,可以實現自己的 Memcached SessionDAO;另外 SessionDAO 中可以使用 Cache 進行緩存,以提高性能;

  • CacheManager:緩存控制器,來管理如用戶、角色、權限等的緩存的;因爲這些數據基本上很少去改變,放到緩存中後可以提高訪問的性能,用戶可以自己實現不同的緩存管理期。如使用redis進行緩存。

  • Cryptography:密碼模塊,Shiro 提高了一些常見的加密組件用於如密碼加密 / 解密的。

三、學習完shiro可以幹什麼?

學習完shiro之後我們就可以非常快速的做完一個項目的 身份驗證授權,功能了。並且可以使用自定義的realm去自己實現身份認證、授權的過程。

ok,本章到此完結,想要繼續學習shiro的小夥伴。可以持續關注我之後的文章。

有什麼問題可以在評論區指出。謝謝!!!

參考:
w3cschool shiro教程
shiro官網

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章