Shiro笔记(三)----Shiro配置文件ini详解

摘要:
一、INI简介INI配置文件是一种key/value的键值对配置,提供了分类的概念,每一个类中的key不可重复,#号代表注释,shiro.ini文件默认在/WEB-INF/或classpath下,shiro会自动查找,INI配置文件一般适用于用户少且不需要在运行时动态创建的情景下使用。

一、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

免责声明:文章转载自《Shiro笔记(三)----Shiro配置文件ini详解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇EBS_FORM开发之触发器k8s环境搭建--基于kubeadm方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

将 Shiro 作为一个许可为基础的应用程序 五:password加密/解密Spring应用

考虑系统password的安全,眼下大多数系统都不会把password以明文的形式存放到数据库中。 一把会採取下面几种方式对password进行处理 password的存储 “编码”存储 Shiro 提供了 base64和 16 进制字符串编码/解码的 API支持,方便一些编码解码操作。 Shiro内部的一些数据的存储/表示都使用了 base64和 16...

前后端分离结构中使用shiro进行权限控制

前阵子在前后端分离项目中集成shiro项目,折腾了一下子,参考了网上一些博客,发现大多都还是之前传统的模式,并不适用于前后端分离结构。今天抽空整理了下demo,方便以后使用以及后来人参考。 一、springboot中集成shiro框架 关于shior框架的介绍可以参考这篇,需要引入相关jar如下: <!--shiro核心jar--> <...

21.Shiro在springboot与vue前后端分离项目里的session管理

1.前言 当决定前端与后端代码分开部署时,发现shiro自带的session不起作用了。 然后通过对请求head的分析,然后在网上查找一部分解决方案。 最终就是,登录成功之后,前端接收到后端传回来的sessionId,存入cookie当中。 之后,前端向后端发送请求时,请求Head中都会带上这个sessionid。 后端代码通过对这个sessionid的解...

shiro拦截器处理链执行顺序

shiro拦截器处理链执行顺序 A1:根据<filter-name>到spring容器查找实现bean,并根据配置把相应的url请求委托给它去执行。 A21:SpringShiroFilter是ShiroFilterFactoryBean的内部类,会执行doFilter()方法。A21没有重写父类的doFilter方法,因此会去寻找父类中的实...

C#通用的参数设置功能模块(ini文件配置)

以下是学习笔记: 1,参数设置的子窗体设置 【1.1】大小要和主窗体嵌入的panel尺寸一致 【2.2】字体和大小要一致 【3.3】无边框设置FormBorderStyle.None 2,批量参数设置思路 Ini: Section 1个:参数 Key 2个:基础参数,高级参数 JSON:对象和JSON字符串之间的互相转换 反射:控件Name就是对象属性的名...

shiro细节、默认的过滤器、匹配模式和顺序

部分细节 [urls] 部分的配置,其格式是:“url=拦截器[参数],拦截器[参数]”; 如果当前请求的url匹配[urls] 部分的某个url模式,将会执行其配置的拦截器。 anon(anonymous)拦截器表示匿名访问(即不需要登录即可访问) authc(authentication)拦截器表示需要身份认证通过后才能访问 shiro中默认的过滤...