原始的iniconfigs配置:
[main] | |
authc = org.apache.shiro.web.filter.authc.PassThruAuthenticationFilter | |
shiro.loginUrl = /login | |
authc.successUrl = /app | |
allGroup = com.airbnb.shiro.UserGroup | |
allGroup.groups = all | |
allGroup.permissions = access, read:*:*, write:*:* | |
allGroup.defaultConnector = hive | |
allGroup.defaultSchema = default | |
allGroup.timeout = 40m | |
allGroup.accessLevel = User | |
cacheManager = org.apache.shiro.cache.MemoryConstrainedCacheManager | |
sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager | |
sessionListener = com.airbnb.shiro.SessionListenerLogger | |
allowAllFilter = com.airbnb.shiro.filter.AllowAllFilter | |
allowAllFilter.groups = $allGroup | |
allowAllFilter.loginUrl = /login | |
securityManager.sessionManager = $sessionManager | |
[users] | |
test = test, all | |
[roles] | |
all = * | |
[urls] | |
/login = authc | |
/logout = logout | |
/app = authc, perms["access"] | |
/api/** = authc, perms["access"] |
一、概述
INI配置文件是一种key/value的键值对配置,提供了分类的概念,每一个类中的key不可重复。在这个示例中我们使用一个INI文件来配置Shiro SecurityManager,首先,在pom.xml同目录中创建一个src/main/resources子目录,在该子目录中创建一个shiro.ini文件,内容如下:
例如:
# =======================
# Shiro INI 配置
# =======================
-
[main]
# 对象和它们的属性在这里定义
# 例如 SecurityManager, Realms 等。
-
[users]
# 用户在这里定义,如果只是一小部分用户。(实际使用中,使用这种配置显然不合适)
-
[roles]
# 角色在这里定义,(实际应用中也不会在这里定义角色,一般都是存储于数据库中)
-
[urls]
# web系统中,基于url的权限配置,web章节会介绍。
二、详细介绍
[main]部分
主要是SecurityManager及其依赖项的配置,例如Realm。
下边是main的一个配置的例子。
[main]
sha256Matcher = org.apache.shiro.authc.credential.Sha256CredentialsMatcher
-
myRealm = com.company.security.shiro.DatabaseRealm
myRealm.connectionTimeout = 30000
myRealm.username = jsmith
myRealm.password = secret
myRealm.credentialsMatcher = $sha256Matcher
-
securityManager.sessionManager.globalSessionTimeout = 1800000
定义对象:
[main]
myRealm = com.company.shiro.realm.MyRealm
...
设置对象的值:
...
myRealm.connectionTimeout = 30000
myRealm.username = jsmith
...
上面的配置会转化为方法的调用
...
myRealm.setConnectionTimeout(30000);
myRealm.setUsername("jsmith");
...
对象的注入:
...
sha256Matcher = org.apache.shiro.authc.credential.Sha256CredentialsMatcher
...
myRealm.credentialsMatcher = $sha256Matcher
...
会调用myRealm.setCredentialsMatcher(sha256Matcher),完成对象的注入。
嵌套属性赋值:
...
securityManager.sessionManager.globalSessionTimeout = 1800000
...
转化为java代码
securityManager.getSessionManager().setGlobalSessionTimeout(1800000);
数组类型注入:
-
# 'cipherKey' 是数组类型的默认使用Base64编码
- securityManager.rememberMeManager.cipherKey = kPH+bIxk5D2deZiIxcaaaA==
...
也可以设置为以0x开头的十六进制
securityManager.rememberMeManager.cipherKey = 0x3707344A4093822299F31D008
集合类型的注入:
Array/Set/List setter,多个值通过逗号分隔
sessionListener1 = com.company.my.SessionListenerImplementation
...
sessionListener2 = com.company.my.other.SessionListenerImplementation
...
securityManager.sessionManager.sessionListeners = $sessionListener1, $sessionListener2
Map键值通过冒号分隔
object1 = com.company.some.Class
object2 = com.company.another.Class
...
anObject = some.class.with.a.Map.property
-
anObject.mapProperty = key1:$object1, key2:$object2
key也可以是引用类型的。
anObject.map = $objectKey1:$objectValue1, $objectKey2:$objectValue2
...
注入顺序:
后边的会覆盖前面的值。
...
myRealm = com.company.security.MyRealm
...
myRealm = com.company.security.DatabaseRealm
...
默认值:
在上面的例子中,我们没有定义SecurityManager却可以对它赋值,这是因为shiro会创建一个SecurityManager默认实现,而对于用户来说,无需关注,如果你要显示的指定自定义的SecurityManager也是可以的。
用户账户的静态配置,例如配置用户名/密码以及角色
[users]
admin = 123
-
lonestarr = 123, role1,
role2 -
darkhelmet = 123, role1,
role2
默认规则
username = password, roleName1, roleName2, ..., roleNameN
密码的加密
[main]
...
sha256Matcher = org.apache.shiro.authc.credential.Sha256CredentialsMatcher
...
iniRealm.credentialsMatcher = $sha256Matcher
...
-
[users]
# user1 = sha256-hashed-hex-encoded password, role1, role2, ...
user1 = 2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b, role1, role2, ...
如果你想让你的密码是base64编码,则如下配置。
[roles]
# 'admin' 拥有所有权限
admin = *
-
# 'schwartz' 拥有
lightsaber下所有权限 schwartz = lightsaber:*
-
# 'goodguy' 拥有winnebago下的'drive' 下的
'eagle5'权限 goodguy = winnebago:drive:eagle5
规则
rolename = permissionDefinition1, permissionDefinition2, ..., permissionDefinitionN
更多请参考授权章节
配置url及相应的拦截器之间的关系,格式:“url=拦截器[参数],拦截器[参数],如:
[urls]
- /admin/** = authc, roles[admin], perms["permission1"]
reference http://blog.csdn.net/lishehe/article/details/45218605
相关推荐
配置applicationContext-shiro.xml 1. 配置authorizingRealm <bean id="authorizingRealm" class="com.mjm.core.interceptor.ShiroRealm"> 2.Shiro Filter 设置拦截的内容和登录页面和成功、失败页面 3.配置...
shiro管理多登录入口配置,手机端登录与网页端登录两个的shiro配置,两个Realm,两个表单过滤,验证码生成,登录类型判断,xml详细配置
SpringMVC+Mybatis+Spring+Shiro+ehcache整合配置文件
springmvc+shiro配置教程
三个核心组件:Subject, SecurityManager 和 Realms. Subject:即"当前操作用户"。...也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro会从应用配置的Realm中查找用户及其权限信息。
从web.xml到spring 配置shiro的使用
本文小编将基于 SpringBoot 集成 Shiro 实现动态uri权限,由前端vue在页面配置uri,Java后端动态刷新权
对象和属性的定义与配置URL的过滤器配置静态用户配置静态角色配置其中,由于用户、角色一般由后台进行操作的动态数据,因此Shiro配置一般仅包含前两项的配置。 Apache Shiro的大多数组件是基于POJO的,因此我们可以...
缓存可以提高查询数据性能, 对同一批数据进行多次查询时, 第一次查询走数据库, 查询数据后,将数据保存在内存中,第二次以后查询 可以直接从内存获取数据,而不需要 和数据库进行交互。
最全的shiro 中文配置文件说明 傻瓜式使用shiro安全框架
1.如果客户端项目采用shiro控制权限 则需要将cas-client 认证过滤交给shiro来管理 2.从shiro下载相应版本的shiro-cas-xxxx. Jar或者在maven里直接添加
springmvc shiro基本配置,亲测无sql,springmvc shiro基本配置,亲测无sql
shiro权限的详细文档讲解,包含shiro的配置及shiro各配置的作用,shiro的权限及shiro的登陆及验证码
shiro 安全框架--最好的中文配置文档,讲了shiro的配置步骤
Shiro与SSM整合(内含详细文档介绍)Shiro与SSM整合(内含详细文档介绍)Shiro与SSM整合(内含详细文档介绍)
NULL 博文链接:https://vti-iteye.iteye.com/blog/1963397
适用于spring集成的javaweb环境
搭建shiro的详细文档,及其代码实现。特别适合自学的人, 简单易学,一看就会。
Java SSM整合shiro demo。 SSM整合shiro的配置以及相关shiro特殊功能实现,包括登录错误次数账号锁定、并发用户登录数控制、记住密码等 shiro
尚硅谷_Shiro_权限 URL 配置细节 · 07. 尚硅谷_Shiro_认证思路分析 · 08.尚硅谷_Shiro_实现认证流程 · 09.尚硅谷_Shiro_实现认证 Realm · 10.尚硅谷_Shiro_密码的比对 · 11.尚硅谷_Shiro_密码的MD5加密 ...