Apache shiro集群实现 (一) shiro入门介绍

Apache shiro集群实现 (二) shiro 的INI配置

Apache shiro集群实现 (三)shiro身份认证(Shiro Authentication)

Apache shiro集群实现 (四)shiro授权(Authentication)--访问控制

Apache shiro集群实现 (五)分布式集群系统下的高可用session解决方案

Apache shiro集群实现 (六)分布式集群系统下的高可用session解决方案---Session共享

一、概述

INI配置文件是一种key/value的键值对配置,提供了分类的概念,每一个类中的key不可重复。在这个示例中我们使用一个INI文件来配置Shiro SecurityManager,首先,在pom.xml同目录中创建一个src/main/resources子目录,在该子目录中创建一个shiro.ini文件,内容如下:

例如:
  1. # =======================
  2. # Shiro INI 配置
  3. # =======================
  4. [main]
  5. # 对象和它们的属性在这里定义
  6. # 例如 SecurityManager, Realms 等。
  7. [users]
  8. # 用户在这里定义,如果只是一小部分用户。(实际使用中,使用这种配置显然不合适)
  9. [roles]
  10. # 角色在这里定义,(实际应用中也不会在这里定义角色,一般都是存储于数据库中)
  11. [urls]
  12. # web系统中,基于url的权限配置,web章节会介绍。

二、详细介绍

[main]部分

主要是SecurityManager及其依赖项的配置,例如Realm。
下边是main的一个配置的例子。
  1. [main]
  2. sha256Matcher = org.apache.shiro.authc.credential.Sha256CredentialsMatcher
  3. myRealm = com.company.security.shiro.DatabaseRealm
  4. myRealm.connectionTimeout = 30000
  5. myRealm.username = jsmith
  6. myRealm.password = secret
  7. myRealm.credentialsMatcher = $sha256Matcher
  8. securityManager.sessionManager.globalSessionTimeout = 1800000
定义对象:
  1. [main]
  2. myRealm = com.company.shiro.realm.MyRealm
  3. ...
设置对象的值:
  1. ...
  2. myRealm.connectionTimeout = 30000
  3. myRealm.username = jsmith
  4. ...
上面的配置会转化为方法的调用
  1. ...
  2. myRealm.setConnectionTimeout(30000);
  3. myRealm.setUsername("jsmith");
  4. ...
对象的注入:
  1. ...
  2. sha256Matcher = org.apache.shiro.authc.credential.Sha256CredentialsMatcher
  3. ...
  4. myRealm.credentialsMatcher = $sha256Matcher
  5. ...
会调用myRealm.setCredentialsMatcher(sha256Matcher),完成对象的注入。

嵌套属性赋值
  1. ...
  2. securityManager.sessionManager.globalSessionTimeout = 1800000
  3. ...
转化为java代码
  1. securityManager.getSessionManager().setGlobalSessionTimeout(1800000);

数组类型注入:

  1. # 'cipherKey' 是数组类型的默认使用Base64编码
  2. securityManager.rememberMeManager.cipherKey = kPH+bIxk5D2deZiIxcaaaA==
  3. ...
也可以设置为以0x开头的十六进制
  1. securityManager.rememberMeManager.cipherKey = 0x3707344A4093822299F31D008

集合类型的注入:

Array/Set/List setter,多个值通过逗号分隔

  1. sessionListener1 = com.company.my.SessionListenerImplementation
  2. ...
  3. sessionListener2 = com.company.my.other.SessionListenerImplementation
  4. ...
  5. securityManager.sessionManager.sessionListeners = $sessionListener1, $sessionListener2
Map键值通过冒号分隔
  1. object1 = com.company.some.Class
  2. object2 = com.company.another.Class
  3. ...
  4. anObject = some.class.with.a.Map.property
  5. anObject.mapProperty = key1:$object1, key2:$object2
key也可以是引用类型的。
  1. anObject.map = $objectKey1:$objectValue1, $objectKey2:$objectValue2
  2. ...

注入顺序:

后边的会覆盖前面的值。
  1. ...
  2. myRealm = com.company.security.MyRealm
  3. ...
  4. myRealm = com.company.security.DatabaseRealm
  5. ...

默认值:

在上面的例子中,我们没有定义SecurityManager却可以对它赋值,这是因为shiro会创建一个SecurityManager默认实现,而对于用户来说,无需关注,如果你要显示的指定自定义的SecurityManager也是可以的。
  1. ...
  2. securityManager = com.company.security.shiro.MyCustomSecurityManager
  3. ...

[users]

用户账户的静态配置,例如配置用户名/密码以及角色
  1. [users]
  2. admin = 123
  3. lonestarr = 123, role1, role2
  4. darkhelmet = 123, role1, role2
默认规则
  1. username = password, roleName1, roleName2, ..., roleNameN
密码的加密
  1. [main]
  2. ...
  3. sha256Matcher = org.apache.shiro.authc.credential.Sha256CredentialsMatcher
  4. ...
  5. iniRealm.credentialsMatcher = $sha256Matcher
  6. ...
  7. [users]
  8. # user1 = sha256-hashed-hex-encoded password, role1, role2, ...
  9. user1 = 2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b, role1, role2, ...
如果你想让你的密码是base64编码,则如下配置。
  1. [main]
  2. ...
  3. # true = hex, false = base64:
  4. sha256Matcher.storedCredentialsHexEncoded = false

[roles]

  1. [roles]
  2. # 'admin' 拥有所有权限
  3. admin = *
  4. # 'schwartz' 拥有lightsaber下所有权限
  5. schwartz = lightsaber:*
  6. # 'goodguy' 拥有winnebago下的'drive' 下的 'eagle5'权限
  7. goodguy = winnebago:drive:eagle5
规则
  1. rolename = permissionDefinition1, permissionDefinition2, ..., permissionDefinitionN
更多请参考授权章节

[urls]

配置url及相应的拦截器之间的关系,格式:“url=拦截器[参数],拦截器[参数],如:
  1. [urls]  
  2. /admin/** = authc, roles[admin], perms["permission1"]
具体参考web章节

Apache shiro集群实现 (二) shiro 的INI配置的更多相关文章

  1. Apache shiro集群实现 (八) web集群时session同步的3种方法

    Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro ...

  2. Apache shiro集群实现 (七)分布式集群系统下---cache共享

    Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro ...

  3. Apache shiro集群实现 (六)分布式集群系统下的高可用session解决方案---Session共享

    Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro ...

  4. Apache shiro集群实现 (五)分布式集群系统下的高可用session解决方案

    Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro ...

  5. Apache shiro集群实现 (四)shiro授权(Authentication)--访问控制

    Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro ...

  6. Apache shiro集群实现 (三)shiro身份认证(Shiro Authentication)

    Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro ...

  7. Apache shiro集群实现 (一) shiro入门介绍

    近期在ITOO项目中研究使用Apache shiro集群中要解决的两个问题,一个是Session的共享问题,一个是授权信息的cache共享问题,官网上给的例子是Ehcache的实现,在配置说明上不算很 ...

  8. 集群环境下Shiro Session的管理

    问题引入 紧接上篇连接 在多台tomcat集群中,shiro管理的session需要放在Redis中,我们只需要增加redisSessionDAO的配置就行 <!-- 定义会话管理器的操作 表示 ...

  9. Apache Hadoop集群离线安装部署(二)——Spark-2.1.0 on Yarn安装

    Apache Hadoop集群离线安装部署(一)——Hadoop(HDFS.YARN.MR)安装:http://www.cnblogs.com/pojishou/p/6366542.html Apac ...

随机推荐

  1. Redis常用命令--Sets

    Set是不重复且无序的字符串元素的集合. 还可以对set集取交集,并集,差等等. 在Redis中大概有15个操作Set的命令. SADD key member [member ...]:添加一个或者多 ...

  2. Struts1开山篇

    ·本次学习的是Struts1的最终版本--struts-1.3.10. ·开发环境: Java版本:1.8.0_131 Tomcat版本:apache-tomcat-9.0.0.M21 下下来完整安装 ...

  3. [ZJOI 2006]物流运输

    Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格 ...

  4. 【20170920校内模拟赛】小Z爱学习

    所有题目开启-O2优化,开大栈空间,评测机效率为4亿左右. T1 小 Z 学数学(math) Description ​ 要说小 Z 最不擅长的学科,那一定就是数学了.这不,他最近正在学习加法运算.老 ...

  5. ●BZOJ 3126 [Usaco2013 Open]Photo

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3126 题解: 单调队列优化DP,神奇.. (好像某次考试考过,当时我用了差分约束+SPFA优 ...

  6. hdu 4578 线段树(标记处理)

    Transformation Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 65535/65536 K (Java/Others) ...

  7. 51Nod 1530 稳定方块

    瓦西亚和皮台亚摆放了m个方块.方块被编号为0到m-1(每个号码出现恰好一次).现在建立一个座标系OX表示地面,OY的方向是竖直向上的.每一方块的左下角有一个座标而且是整点座标. 摆放好的方块一定要是稳 ...

  8. SQL优化实用方法

    SQL优化:避免索引失效 1.不使用NULL 任何在where子句中使用is null或is not null的语句优化器是不允许使用索引的.因为只有该字段中有null值,即使创建了索引其实也是没有用 ...

  9. [ 学习笔记 ] Hibernate框架学习之一

    一.JavaEE开发三层结构和三大框架的对应关系: Struts2框架 -> 表现层 web层(MVC是表现层的设计模型) 业务层 service层 Hibernate框架 -> 持久层 ...

  10. Cisco 交换机配置的基本命令

    1.不同的vlan 不同vlan需要路由 在路由的端口设置多个IP段 交换机模拟器实验六 2.查看端口名字 SWA#sh vlan    default  Active  F0/1, F0/2, F0 ...