我不是語言的開發者,我只是它的搬運工。每進步一點,5年之後你也是個人物
為什麼看網上的例子都喜歡用ini格式文件,為什麼不用.propertes或xml。
我們來看看一個ini格式文件text.ini:
- [main]
- activeDirectoryRealm = org.apache.shiro.realm.activedirectory.ActiveDirectoryRealm
- activeDirectoryRealm.systemUsername = uid=admin,ou=system
- activeDirectoryRealm.systemPassword = secret
- activeDirectoryRealm.searchBase = o=sevenSeas,ou=people
- activeDirectoryRealm.url = ldap://localhost:10389
- [users]
- name=cy
- pwd=123
看了源碼才知道,原來shiro框架裡新造了一個Ini類,當我們傳入資源時,Ini裡使用流一行一行的讀資源,當遇到”#”或”;”開頭的則直接跳過;
遇到“[*]”則將中括號裡的字符串看過Section(區塊)的key,後面一行一行都視做該區域的內容直到遇到新的中括號。隨後再解讀區域下面多行字符串(至少一行),如果遇到“:”或“=”或“”,則前面當做key,後面的則是為value(同時會過濾掉value裡前後空格以及“=”前後空格),存到一個Section裡,最後把所有行解析完後放到名為sections的HashMap裡。
IniSecurityManagerFacotry繼承自IniFactorySupport,而IniFactorySupport有個setIni()方法將解析出來的Ini結構數據保存到該類裡,其它什麼都不做。
1.[users]部分
#提供了對用戶/密碼及其角色的配置,用戶名=密碼,角色1,角色2
username=password,role1,role2
例如:
配置用戶名/密碼及其角色,格式:“用戶名=密碼,角色1,角色2”,角色部分可省略。如:
[users]
zhang=123,role1,role2
wang=123
2. [roles]
#提供了角色及權限之間關係的配置,角色=權限1,權限2
role1=permission1,permission2
例如:
配置角色及權限之間的關係,格式:“角色=權限1,權限2”;如:
[roles]
role1=user:create,user:update
role2=*
如果只有角色沒有對應的權限,可以不配roles
3. [main]部分
提供了對根對象securityManager及其依賴對象的配置。
創建對象
securityManager=org.apache.shiro.mgt.DefaultSecurityManager
其構造器必須是public空參構造器,通過反射創建相應的實例。
1、對象名=全限定類名 相對於調用public無參構造器創建對象
2、對象名.屬性名=值 相當於調用setter方法設置常量值
3、對象名.屬性名=$對象引用 相當於調用setter方法設置對象引用
4.[urls]
#用於web,提供了對web url攔截相關的配置,url=攔截器[參數],攔截器
/index.html = anon
/admin/** = authc, roles[admin],perms["permission1"]
閱讀更多 java執行官 的文章