前言
在SpringBoot:集成Shiro之INI认证篇和SpringBoot:集成Shiro之INI授权篇 两篇需要使用到INI文件,这一篇文章是用来简单阐述以下INI的的编写格式以及组成模块.(大部分是转载内容,只是加以整理而已.)
#用户
[users]
root=123456,role1
admin=admin,role1,role2
#角色和权限
[roles]
role1 = permission1
role2 = permission2,permission3
Shiro中INI的构成
在Shiro中的INI主要是由四个部分组成,分别是main,users,roles,urls.下面我就分别来说明各个模块的使用以及作用.
[main] 模块 (Shiro功能配置)
(骚栋用这个模块使用的次数不多,直接从网上CV了~见谅)
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
[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();
[roles] 模块 (角色权限配置)
[roles]将角色和权限关联起来,格式为:角色名=权限字符串1,权限字符串2…..,例如
role1 = printer:create,printer:query
权限标识符号规则:【中间用“:”(半角冒号分隔)】
权限标识符号详情 |
---|
资源:操作【user:create:表示对用户资源进行create操作】【等价于:user:create:*(对所有的用户实例进行操作 |
资源:操作:实例【user:create:01:表示对用户资源的01实例进行create操作】 |
例子:【user:*:01 表示对用户资源的01实例进行所有操作】 |
所有权限标识符规则:【使用 * 号来表示所有权限标识符】
所有权限标识符号详情 |
---|
通配符:user:edit:、user::、user::manager 等价:user:edit==user:edit:、user == user::* 只能从字符串结尾处省略。 |
[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匹配顺序是按照你配置的顺序,所以匹配顺序一定要正确,否则就有可能会造成访问失败.
结语
前面全部是转载内容,网上的相关很多,这是只是稍作整理.方便日后查看.欢迎关注骚栋.如果有任何问题欢迎评论区留言,谢谢大家了.最后附上原文链接.尊重作者.