Shiro安全框架入門

Shiro框架中,有3個重要的概念

1.Subject

類似於我們平常所使用的“用戶”概念,但用戶常常是指人,而Subject還可能是其他的第三方軟件等等,所以在這裏用的是Subject這一概念而不是User


2.SecurityManager

Shiro架構中的核心,爲Subject管理安全操作


3.Reamls

連接Subject和SecurityManager的橋樑,相當於dao層,配置Shiro時,最起碼要有一個Reamls


小demo:

Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
AuthenticationToken token = new UsernamePasswordToken("marksg","password");
Subject currentUser = SecurityUtils.getSubject();
currentUser.login(token);


1.新建factory,加載classpath下的shiro.ini配置文件,文件內容在後面給出。

2.securityManager實例化。

3.使securityManager可訪問

4.獲取用戶名和密碼

5.獲取當前用戶

6.login


Shiro.ini:

[user]
residentskroob = 12345, president


darkhelmet = ludicrousspeed, darklord, schwartz


lonestarr = vespa, goodguy, schwartz


mark sg=password,test



[roles]


admin = *


schwartz = lightsaber:*


goodguy = winnebago:drive:eagle5
[urls]
test/target=roles[admin]
test/target1=anno
test/target2=authc

其中,user的命名規則爲:

username=password,role1,role2......roleN

roles的命名規則爲:

rolename=Perm1,Perm2,......PermN


所以,上面的ini文件中

mark sg=password,test,admin
<pre name="code" class="plain">admin = *


的意思是,mark sg這principal(username)的credential(password)爲password,擁有的角色爲test,admin

其中admin有"*"這一權限

[urls]下表示的含義爲:

(1)test/target0=roles[admin],表示路徑test/target1只有擁有admin這一ROLE的用戶纔可以訪問

(2)test/target1=anno,表示路徑test/target1是所有人都可以訪問的路徑

(3)test/target2=authc,表示路徑test/target2只有通過了登錄驗證的用戶纔有權限可以訪問

那麼回到代碼中的第4行

<pre name="code" class="java">AuthenticationToken token = new UsernamePasswordToken("marksg","password");
Subject currentUser = SecurityUtils.getSubject();
currentUser.login(token);


因爲我們已經讀取了ini文件了,所以這裏的我們的login操作時,

實際上市將token這一對象傳入,然後檢查是否有符合的principal和credential都符合的情況

如果沒有則會報錯,有的話則成功login

在Login以後可以用currentUser.getPrincipal()輸出當前的subject



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