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






