學習Shiro的時候,閱讀過很多優秀的文章,比如《跟我學Shiro》系列等等。于是結合自己的實際情況,自己整理了一部分。這是第一篇文章,旨在從基礎案例出發了解其原理。
一、認識Shiro
1、簡介
Shiro是Apache的一個安全權限框架,比如說我們都遇到過這樣一種情況,我們下載完某個軟件的時候,然后登陸。突然發現我們可以使用好幾種身份去登陸。比如說游客、會員身份、普通用戶等。
我們使用的身份不同,展示的界面是不一樣的。Shiro就是要完成這樣一個功能,用戶以不同的身份登陸,Shiro安全驗證之后展示不同的界面。
他的重要性就不說了,只要是個好一點的網站或者是App都會使用到。
2、功能簡介
上面的例子只是讓我們認識一下Shiro。我們給出一張完整的功能圖,整體來認識一下:
從上面這張圖我們可以看到,主要包含了兩大部分。
第一部分:primary concerns(主要解決的問題)
(1)Authentication:身份認證/登錄,驗證用戶是不是擁有相應的身份;
(2)Authorization:授權,即權限驗證,驗證某個已認證的用戶是否擁有某個權限,比如說王者榮耀里面普通用戶沒有皮膚,交了錢就可以有使用會員皮膚的權限了。
(3)Session Manager:會話管理,用戶登錄就是一次會話,在沒有退出之前,它的所有信息都在會話中;
(4)Cryptography:加密,保護數據的安全性。這個如何理解呢?平時自己學習的時候,往MySQL數據庫里面都是存儲的用戶名和密碼,但是真實情況下肯定就不是這樣了,只保存加密后的密碼。
第二部分:支持的技術
(1)Web Support:Web支持;
(2)Caching:緩存用戶的登錄、角色、權限信息;
(3)Concurrency:支持多線程并發驗證,一個線程能把權限自動傳播到另一個線程;
(3)Testing:測試支持;
(4)Run As:允許一個用戶假裝為另一個用戶的身份進行訪問;
(5)Remember Me:記住我,即一次登錄后,下次再來的話不用登錄了。淘寶網經常看到。
3、實現原理
上面我們知道了Shiro能干什么,這一小節主要解決的是如何做的問題。
這張圖結合了外部結構和內部結構,我們認識一下里面涉及到的概念。
(1)Subject
他指代的是當前用戶,比如說游客、VIP等,當然可以不是具體的人。也可以某個機器。
(2)Security Manager
他表示的是安全管理器,用戶使用Shiro不同的功能,安全管理器就調用不同的模塊進行管理。比如說你想要驗證當前用戶是否有權限登錄系統。安全管理區就會調用Authenticator。在比如說你想讓當前的用戶可以使用那些功能,安全管理器就會調用Authrizer。
(3)Realm
realm表示數據源,比如說你要想驗證用戶身份是游客還是會員,realm就提前把這些用戶和權限先保存了,Shiro然后調用realm里面的數據進行驗證。
OK,這就是其基本原理很簡單。下面我們就看一個例子,看看Shiro到底如何使用。
二、基礎案例
第一步:添加jar包或者是依賴
我是在maven進行管理的,所以你只需要添加以下依賴即可
如果你沒有使用maven,那就直接在百度上搜索下列jar包導入eclipse中即可。
第二步:在Src目錄下面創建log4j.properties
這個文件是和日志相關的文件。直接復制粘貼即可
第三步:在src下面創建shiro.ini文件
這個文件里面保存了Shiro的各種信息,他的作用就好比是realm(暫時先這樣理解)。
第四步:創建Test.JAVA用戶登錄,開始驗證
由于代碼太長,我們分開來寫,用戶登錄成功之后就可以做其他事情了
這就是整個執行流程。我們只需要看上面的代碼就能明白,不過在實際當中肯定是不會在SE中這樣寫的,一般都是要結合SpringBoot或者是SSM。下一篇文章,我們將直接介紹SpringBoot整合Shiro。然后對Shiro中的每一個功能,進行一個細致的介紹。如有問題還請指正。