天天看點

Shiro探究

之前制作網站的時候使用了Apache Shiro進行登入驗證/權限認證,相比Spring Security,它更小巧,更容易上手,而且和Spring Boot的配合使用也完全不麻煩。

Shiro的四大功能

  1. Authentication:有時也簡稱為“登入”,這是一個證明使用者是他們所說的他們是誰的行為。
  2. Authorization:通路控制的過程,也就是絕對“誰”去通路“什麼”。
  3. Session Management:管理使用者特定的會話,即使在非 Web 或 EJB 應用程式。
  4. Cryptography:通過使用加密算法保持資料安全同時易于使用。

Shiro的架構的3個主要的概念

Subject,SecurityManager 和 Realms

我對這些的了解比較通俗。

Subject就是對象,比如登入的使用者。

Realms裡面應該定義登入/權限的邏輯,因為架構并不知道你的邏輯是怎麼樣的,是以往往需要重寫Realm方法。然後它負責對資料庫的一些操作,可以看作DAO層。

而SecurityManager相當于管理Realms的容器,它負責管理Reamls,以及各種内部元件。(隻是從這個方面看的話,感覺和分布式架構中的注冊中心zookeeper/eureka的作用類似。當然此外這兩者是完全不同的。)

ShiroConfiguration

因為我使用的是Spring boot,是以相比Spring配置更為簡便。而需要內建Shiro的話,需要單獨配置ShiroConfiguration。

步驟也很簡單,隻有三步:

  1. 配置Realms,可以配置一個/多個,也可以選擇重寫。我個人是重寫了授權和鑒權的過程。
  2. 調用SecurityManager注冊Realm,類似于将服務送出給注冊中心
  3. 配置過濾器

過濾器不需多說,要想避免直接通路網站的靜态資源必備,而且可以根據權限來決定可以通路的頁面。其配置方法有許多種,我個人采用的是比較簡單粗暴的鍊式過濾。就是使用了LinkedHashMap(這個是有序的哈希表),按照順序比對。比對成功則提供頁面,不成功則跳轉到指定頁面。

這是比較基本的用法。但是實際應用中,每次通路頁面都要進行一次鑒權會比較麻煩,是以我在ShiroConfiguration裡內建了Redis緩存,這裡便不詳細說明了。

其實Shiro作為一個企業級的架構,功能非常強大。在這裡登入和權限驗證算是一個比較基礎的功能,期待以後可以繼續發掘它以及一直想玩的Spring Security。