我不是语言的开发者,我只是它的搬运工。每进步一点,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執行官 的文章