一、INI簡介
INI配置文件是一種key/value的鍵值對配置,提供了分類的概念,每一個類中的key不可重復,#號代表注釋,shiro.ini文件默認在/WEB-INF/ 或classpath下,shiro會自動查找,INI配置文件一般適用於用戶少且不需要在運行時動態創建的情景下使用。
1.在web.xml中配置shiro的過濾器
要使用Shiro必須在web.xml中配置shiro,在web.xml 中自定義shiro.ini位置(默認位置)/WEB-INF/shiro.ini or classpath:shiro.ini, 加入以下內容:
<filter>
<filter-name>ShiroFilter</filter-name>
<filter-class>org.apache.shiro.web.servlet.IniShiroFilter</filter-class>
<init-param>
<param-name>configPath</param-name>
<param-value>/WEB-INF/shiro.ini</param-value>
</init-param>
</filter>
2.shiro.ini示例
用戶
[users]
#用戶zhang的密碼是123,此用戶具有role1和role2兩個角色
zhang=123,role1,role2
wang=123,role2
#權限
[roles]
#角色role1對資源user擁有create、update權限
role1=user:create,user:update
#角色role2對資源user擁有create、delete權限
role2=user:create,user:delete
#角色role3對資源user擁有create權限
role3=user:create
ini配置中主要配置有四大類:main,users,roles,urls
[main]
#提供了對根對象 securityManager 及其依賴的配置
securityManager=org.apache.shiro.mgt.DefaultSecurityManager
…………
securityManager.realms=$jdbcRealm
[users]
#提供了對用戶/密碼及其角色的配置,用戶名=密碼,角色 1,角色 2
username=password,role1,role2
[roles]
#提供了角色及權限之間關系的配置,角色=權限 1,權限 2
role1=permission1,permission2
[urls]
#用於 web,提供了對 web url 攔截相關的配置,url=攔截器[參數],攔截器
/index.html = anon
/admin/** = authc, roles[admin], perms["permission1"]
1、[main]
main主要配置shiro的一些對象,例如securityManager ,Realm,authenticator,authcStrategy 等等,例如
#聲明一個realm
MyRealm1=com.shiro.mutilrealm.MyRealm1
MyRealm2=com.shiro.mutilrealm.MyRealm2
#配置驗證器
authenticator = org.apache.shiro.authc.pam.ModularRealmAuthenticator
# AllSuccessfulStrategy 表示 MyRealm1和MyRealm2 認證都通過才算通過
#配置策略
#authcStrategy = org.apache.shiro.authc.pam.AllSuccessfulStrategy
authcStrategy = com.shiro.authenticationstrategy.MyAuthenticationStrategy
#將驗證器和策略關聯起來
authenticator.authenticationStrategy = $authcStrategy
#配置驗證器所使用的Realm
authenticator.realms=$MyRealm2,$MyRealm1
#把Authenticator設置給securityManager
securityManager.authenticator = $authenticator
除了對象之外,也可以使用byte數組,集合,map等等
例如:
byte數組
authenticator.bytes=0x68656c6c6f69
集合
authenticator.array=1,2,3
securityManager.sessionManager.sessionListeners = $sessionListener1,$sessionListener2
map(鍵值對使用冒號來限定 key:value)
authenticator.map=$jdbcRealm:$jdbcRealm,1:1,key:abc
在web應用中,我們可以進行以下配置,表示如果用戶沒有登錄進行訪問時,將自動跳轉到/login頁面
authc.loginUrl=/login
2、[users]
[users]允許你配置一組靜態的用戶,包含用戶名,密碼,角色,一個用戶可以有多個角色,可以配置多個角色,例如:
username = password, roleName1, roleName2, …, roleNameN
這里涉及到密碼,就牽扯到加密的問題,我們可以MD5,Sha1,Sha256等算法進行加密
[main]
#告訴shiro我們用哪個加密算法
sha256Matcher = org.apache.shiro.authc.credential.Sha256CredentialsMatcher
iniRealm.credentialsMatcher = $sha256Matcher
[users]
#用戶名=密碼,角色
admin=355b1bbfc96725cdce8f4a2708fda310a80e6d13315aec4e5eed2a75fe8032ce,role1
獲取密碼的 hex 加密字符串
String ss = new Sha256Hash("cc").toHex();
3、[roles]
[roles]將角色和權限關聯起來,格式為:角色名=權限字符串1,權限字符串2…..,例如
role1 = printer:create,printer:query
限標識符號規則:【中間用“:”(半角冒號分隔)】
|---資源:操作【user:create:表示對用戶資源進行create操作】【等價於:user:create:*(對所有的用戶實例進行操作)】
|---資源:操作:實例【user:create:01:表示對用戶資源的01實例進行create操作】
|---例子:【user:*:01 表示對用戶資源的01實例進行所有操作】
權限表示的幾種方式:
(1)用簡單的字符串來表示一個權限,如:user (相當於:user:*)
(2)多層次管理
2.1 printer:print
其中第一部分是權限被操作的領域(打印機),第二部分是被執行的操作
2.2 多個值
多個值使用逗號隔開,如role1 = fendo:create,fendo:query
不一定要xxx:yyyy的形式,也可以直接使用簡單字符串
2.3 可以使用*號表示所有
比如printer:* ,表示你可以對打印機進行任何操作,
或者使用 *:query ,表示你在任何領域下,都有查詢操作
(3)實例級權限:域:操作:實例
如:user:edit:manager 只能對 user 中的 manager 進行 edit。
通配符:user:edit:*、user:*:*、user:*:manager
等價:user:edit==user:edit:*、user == user:*:* 只能從字符串結尾處省略。
注意:
如果一個獨立的 permissionDefinition 需要被內部逗號分隔(例如,printer:5thFloor:print,info),則需要用戶雙引號環繞該定義,以避免錯誤解析。
如果角色不想關聯權限,則不需要在 [roles] 部分把它們列出來。只需定義在 [user] 部分中定義角色名就足以創建尚不存在的角色。
僅定義非空的 [users] 或 [roles] 部分就將自動地觸發org.apache.shiro.realm.text.IniRealm 實例的創建
4、[urls]
這部分配置主要在web應用中,格式為:url=攔截器[參數],攔截器[參數]……,例如
/login=anon
/unauthorized=anon
/static/**=anon
/authenticated=authc
/role=authc,roles[admin]
/permission=authc,perms["user:create"]
說明:
anon: 表示匿名訪問,即不需要登錄就可以訪問,例如/login這個路徑可以匿名訪問
authe: 表示需要登錄才能訪問
roles[admin]: 表示有admin這個角色的用戶才能訪問
perms["user:create"]: 表示有這個權限的才能訪問
url通配符語法:
?:匹配一個字符
*:匹配零個或多個字符
**:匹配零個或多個路徑
url匹配順序是按照你配置的順序
————————————————
版權聲明:本文為CSDN博主「lfendo」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u011781521/article/details/74892074