`

shiro的niConfigs配置解释

阅读更多

原始的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文件,内容如下:

例如:
  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"]

reference http://blog.csdn.net/lishehe/article/details/45218605

分享到:
评论

相关推荐

    简单配置 shiro + spring +springMVC+hibernate简单框架

    配置applicationContext-shiro.xml 1. 配置authorizingRealm <bean id="authorizingRealm" class="com.mjm.core.interceptor.ShiroRealm"> 2.Shiro Filter 设置拦截的内容和登录页面和成功、失败页面 3.配置...

    shiro 配置文件

    下面将详细介绍如何在 Web 应用中配置 Shiro,并结合 Spring 进行整合。 首先,我们来看 `web.xml` 文件中的配置。Shiro 的 Web 支持通常通过 Filter 方式进行,主要涉及两个 Filter:`ShiroFilter` 和 `...

    SpringMVC+Mybatis+Spring+Shiro+ehcache整合配置文件

    接着,配置Shiro的安全管理,定义 Realm 对象进行认证和授权,结合Ehcache实现缓存策略。最后,通过Spring的AOP支持,将Shiro的拦截器添加到Spring的全局拦截器链中,实现安全控制。 这样的整合可以创建一个健壮、...

    基于Shiro 拦截URL,实现权限控制

    1. **配置Shiro**:在Spring或者其他的配置文件中,你需要声明并配置Shiro的相关过滤器,如`authc`(用于身份验证)、`perms`(基于权限的拦截)和`roles`(基于角色的拦截)。 2. **定义角色和权限**:在提供的`...

    springmvc+shiro配置教程

    SpringMvc+Shiro配置教程 SpringMvc和Shiro是两个widely使用的Java Web开发框架,前者是一个基于模型-视图-控制器(MVC)模式的Web应用程序框架,而后者是一个基于权限控制的安全框架。将这两个框架结合使用,可以...

    shiro管理多登录入口配置,手机端登录与网页端登录

    在"shiro管理多登录入口配置,手机端登录与网页端登录"这个场景下,我们需要考虑如何为不同的登录入口(手机端和网页端)设置独立的验证流程。 首先,Shiro 的核心组件 Realm 负责与应用数据源交互,验证用户身份。...

    spring mvc shiro的配置使用.zip_DEMO_spring mvc_spring mvc shiro

    - **配置 Shiro**:首先,我们需要在 Spring 的配置文件中声明并配置 SecurityManager,通常会使用 `org.apache.shiro.spring.web.ShiroFilterFactoryBean`。同时,定义 Realm,比如 `AuthorizingRealm`,与数据库...

    SpringBoot 集成 Shiro 实现动态uri权限

    1. **配置Shiro**: 在SpringBoot项目中引入Shiro依赖,并配置Shiro的Realm,用于处理认证和授权。 Realm是Shiro与应用程序的特定安全存储(如数据库)的桥梁。 2. **定义权限模型**: 设计权限、角色和用户的模型,...

    Shiro与SSM整合(内含详细文档介绍)

    2. **配置Shiro**:创建一个Shiro配置类,配置Realm(认证和授权的实现),定义用户、角色和权限的映射。 Realm是Shiro与应用数据源交互的桥梁,它可以连接到数据库或其他数据存储,获取用户的认证和授权信息。 3. ...

    Apache shiro 1.13.0源码

    在 web 应用中,可以通过配置 `shiro.ini` 或者 `Web.xml` 来定制过滤器。 6. **Caching**:Shiro 支持缓存管理,可以缓存认证和授权信息,提高性能。 7. **Testing**:源码中包含了测试用例,帮助开发者理解和...

    springmvc,mybatis,shiro综合配置示例

    首先,我们需要在SpringMVC的配置文件中引入Shiro的Filter,然后配置Shiro的相关bean,如SecurityManager、Realm等。接着,通过Shiro的 Realm 实现对用户和角色的认证,以及对资源的授权。同时,我们还需要在MyBatis...

    Shiro原理+配置

    三个核心组件:Subject, SecurityManager 和 Realms. Subject:即"当前操作用户"。...也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro会从应用配置的Realm中查找用户及其权限信息。

    Apache shiro权限控制基础配置代码

    在本文中,我们将深入探讨Apache Shiro的基础配置和代码实现,以帮助你理解如何有效地使用Shiro进行权限控制。 **1. Shiro架构组件** Shiro的核心组件包括:Subject、Realms、Caches、Session Manager、...

    搭建Springboot整合shiro安全框架+Redis+Swagger+Filter超详细

    首先,我们需要在`pom.xml`中添加Shiro的依赖,然后配置Shiro的配置类,包括 Realm(用于处理认证和授权)和过滤器链定义,以决定哪些URL需要经过Shiro的拦截。 2. **Redis集成**:为了提高性能和减轻服务器负担,...

    shiro整合ssm的全部jar包

    在整合SSM时,你需要将Shiro的jar包引入到项目中,并创建Shiro的配置文件,例如`shiro.ini`或`shiro.xml`,在这里定义用户、角色、权限以及安全策略。同时,你需要在Spring的配置文件中声明Shiro的相关bean,如...

    Apache Shiro 使用手册(五) Shiro 配置说明

    对象和属性的定义与配置URL的过滤器配置静态用户配置静态角色配置其中,由于用户、角色一般由后台进行操作的动态数据,因此Shiro配置一般仅包含前两项的配置。 Apache Shiro的大多数组件是基于POJO的,因此我们可以...

    shiro1.7.1.zip

    4. **shiro-config-ogdl-1.7.1.jar**:这可能是OGDL配置解析器,OGDL(Object-Graph Description Language)是一种简洁的配置语言,用于定义Shiro的配置。 5. **shiro-spring-1.7.1.jar**:Spring整合模块,使得...

    Shiro元数据配置

    在 Shiro 中,元数据配置是一种灵活的方式,用于定义访问控制策略。下面将详细解释 Shiro 元数据权限设置中的相关注解及其使用场景。 1. @RequiresAuthentication 这个注解用于确保在访问或调用某个类、实例或方法...

    Ehcache缓存框架整合Spring和shiro权限配置

    缓存可以提高查询数据性能, 对同一批数据进行多次查询时, 第一次查询走数据库, 查询数据后,将数据保存在内存中,第二次以后查询 可以直接从内存获取数据,而不需要 和数据库进行交互。

    Cas客户端shiro配置

    1.如果客户端项目采用shiro控制权限 则需要将cas-client 认证过滤交给shiro来管理 2.从shiro下载相应版本的shiro-cas-xxxx. Jar或者在maven里直接添加

Global site tag (gtag.js) - Google Analytics