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实现分布式锁的正确姿势

    分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁.虽然网上已经有各种介绍Re ...

  2. codevs 搜索题汇总(黄金级)

    2801 LOL-盖伦的蹲草计划  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold   题目描述 Description 众所周知,LOL这款伟大的游戏,有个叫盖 ...

  3. [PA 2014]Kuglarz

    Description 魔术师的桌子上有n个杯子排成一行,编号为1,2,…,n,其中某些杯子底下藏有一个小球,如果你准确地猜出是哪些杯子,你就可以获得奖品.花费c_ij元,魔术师就会告诉你杯子i,i+ ...

  4. [ZJOI2013]丽洁体

    题目描述 平时的练习和考试中,我们经常会碰上这样的题:命题人给出一个例句,要我们类比着写句子.这种往往被称为仿写的题,不单单出现在小学生的考试中,也有时会出现在中考中.许多同学都喜欢做这种题,因为较其 ...

  5. hdu 5430(几何)

    题意:求光在圆内反射n次后第一次返回原点的方案数 如果k和n-1可约分,则表明是循环多次反射方案才返回原点. #include <iostream> #include <cstrin ...

  6. [Noi2016]国王饮水记

    来自FallDream的博客,未经允许,请勿转载,谢谢. 跳蚤国有 n 个城市,伟大的跳蚤国王居住在跳蚤国首都中,即 1 号城市中.跳蚤国最大的问题就是饮水问题,由于首都中居住的跳蚤实在太多,跳蚤国王 ...

  7. [bzoj4813][Cqoi2017]小Q的棋盘

    来自FallDream的博客,未经允许,请勿转载,谢谢. 小Q正在设计一种棋类游戏.在小Q设计的游戏中,棋子可以放在棋盘上的格点中.某些格点之间有连线,棋子只能在有连线的格点之间移动.整个棋盘上共有V ...

  8. C语言程序设计第二次作业—————顺序结构改

    1.输出带框文字:在屏幕上输出以下3行信息. ************* Welcome ************* 源程序 #include <stido.h> int mian() { ...

  9. STM8操作LCD5110总结

    附上一小段代码: void LCD_init(void) { // 产生一个让LCD复位的低电平脉冲 //LCD_RST = 0; GPIO_WriteLow(LCD_PORTG, LCD_RST); ...

  10. 浅谈JAVA8引入的接口默认方法

    参考 http://blog.csdn.net/wanghao_0206/article/details/52712736 public interface InterfaceTest { publi ...