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. Css实现checkbox及radio样式自定义

    前言 checkbox和radio样式自定义在网页中是很常见的, 比如在进行表单输入时性别的选择,用户注册时选择已阅读用户协议.随着用户对产品体验要求越来越高,我们都会对checkbox和radio重 ...

  2. 【JDK1.8】JUC——LockSupport

    一.前言 Basic thread blocking primitives for creating locks and other synchronization classes. 用于创建锁定和其 ...

  3. 系统引导修复 ---- Windows 和 Ubuntu

    Windows: 1.准备windows相应镜像盘,u盘启动该系统 (以下均为windows10安装界面) 2.进入安装界面<语言,时间,键盘格式>,点击"下一步" 3 ...

  4. 《C++ Primer》学习笔记:迭代器介绍

    <C++Primer>(第五版)中,3.4.1的例题中使用一个名为text的字符串向量存放文本文件中的数据,输出text中的内容,刚开始我这样写: #include <iostrea ...

  5. codefroces 297E Mystic Carvings

    problem:一个圆上依次有1~2*n的数字.每个数字都有且只有另一个数字与他相连.选出三条线,使得每条线的两端之间隔的最少点(只包括被选择的6个点)的个数相等.输入输出格式输入格式: The fi ...

  6. 李耀于NOIP2010集训出的题 Dvalue

    此题模型比较明显,求无向图的一棵生成树,使得最大边减去最小边的值最小,这是最小生成树的一个变式 设计出此题的算法需要利用Kruskal贪心的性质,首先枚举一条最小边,接着求原图的一棵最小生成树,根据k ...

  7. 51Nod 1196 字符串的数量

    用N个不同的字符(编号1 - N),组成一个字符串,有如下要求: (1) 对于编号为i的字符,如果2 * i > n,则该字符可以作为结尾字符.如果不作为结尾字符而是中间的字符,则该字符后面可以 ...

  8. Codeforces Round #430 A. Kirill And The Game

    Kirill plays a new computer game. He came to the potion store where he can buy any potion. Each poti ...

  9. [Noi2014]购票

    来自FallDream 的博客,未经允许,请勿转载,谢谢. 今年夏天,NOI在SZ市迎来了她30周岁的生日.来自全国 n 个城市的OIer们都会从各地出发,到SZ市参加这次盛会.        全国的 ...

  10. VS2017+xamain开发安卓(Addroid)应用

    Visual Studio 2017下载地址: https://www.visualstudio.com/zh-hans/ 安卓模拟器官网下载:  https://www.visualstudio.c ...