Shiro学习
- 格式:docx
- 大小:149.13 KB
- 文档页数:22
Shiro权限管理框架(⼀):Shiro的基本使⽤shiro概念:Apache Shiro是⼀个强⼤且易⽤的Java安全框架,执⾏⾝份验证、授权、密码和会话管理。
使⽤Shiro的易于理解的API,您可以快速、轻松地获得任何应⽤程序,从最⼩的移动应⽤程序到最⼤的⽹络和企业应⽤程序。
上⾯这段话来⾃百度百科,没啥⽤。
想要快速理解并使⽤Shiro要先从最重要的三⼤概念⼊⼿。
1. Subject:⼤⽩话来讲就是⽤户(当然并不⼀定是⽤户,也可以指和当前应⽤交互的任何对象),我们在进⾏授权鉴权的所有操作都是围绕Subject(⽤户)展开的,在当前应⽤的任何地⽅都可以通过SecurityUtils的静态⽅法getSubject()轻松的拿到当前认证(登录)的⽤户。
2. SecurityManager:安全管理器,Shiro中最核⼼的组件,它管理着当前应⽤中所有的安全操作,包括Subject(⽤户),我们围绕Subject展开的所有操作都需要与SecurityManager进⾏交互。
可以理解为SpringMVC中的前端控制器。
3. Realms:字⾯意思为领域,Shiro在进⾏权限操作时,需要从Realms中获取安全数据,也就是⽤户以及⽤户的⾓⾊和权限。
配置Shiro,我们⾄少需要配置⼀个Realms,⽤于⽤户的认证和授权。
通常我们的⾓⾊及权限信息都是存放在数据库中,所以Realms也可以算是⼀个权限相关的Dao层,SecurityManager在进⾏鉴权时会从Realms中获取权限信息。
这三个基本的概念简答理解后就可以开始配置和使⽤Shiro了,其实Shiro最基本的使⽤⾮常简单,加⼊依赖后只需要配置两个Bean,再继承⼀个抽象类实现两个⽅法即可。
基本使⽤:引⼊⼀个依赖新建⼀个基于Springboot的Web项⽬,引⼊Shiro依赖。
<!-- https:///artifact/org.apache.shiro/shiro-web --><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>1.4.0</version></dependency>配置两个Bean新建⼀个Shiro配置类,配置Shiro最为核⼼的安全管理器SecurityManager。
shiro 面试题Shiro面试题Shiro是一个常用的Java安全框架,广泛应用于各种Java项目中。
在使用Shiro的过程中,我们需要经历一系列的面试问题。
本文将围绕Shiro面试题展开,探讨与Shiro相关的知识点,并给出相应的答案。
以下是一些常见的Shiro面试题:1. 什么是Shiro?Shiro是一个强大且易于理解的Java安全框架,用于身份验证、授权、加密和会话管理等功能。
它提供了一套易于使用和集成的API,可以帮助开发人员构建安全的应用程序。
2. Shiro的主要特点有哪些?Shiro的主要特点包括:- 简单易用:Shiro提供了简单直观的API和易于理解的概念,使开发人员可以轻松地集成安全功能。
- 权限管理:Shiro支持细粒度的权限管理,可以进行角色和权限的配置和管理。
- 身份验证:Shiro提供了各种身份验证方法,包括基于表单、基本的HTTP身份验证和客户端证书等。
- 会话管理:Shiro提供了会话管理功能,可以管理用户的会话状态,包括会话超时、会话集群和会话持久化等。
- 密码加密:Shiro提供了密码加密的功能,保护用户的密码安全。
3. Shiro的架构是怎样的?Shiro的架构包括三个核心概念:Subject、SecurityManager和Realm。
- Subject: 用户主体,可以是一个人、一台机器或者其他和应用程序进行交互的个体。
Subject可以进行身份验证和授权等操作。
- SecurityManager: 安全管理器,负责处理所有的用户身份验证和授权操作。
它是Shiro的核心,用于管理和协调Shiro的各个组件。
- Realm: 安全数据源,在应用程序中定义了获取认证和授权数据的方法。
Realm将身份验证、权限和角色等数据源封装起来,供SecurityManager使用。
4. Shiro提供的身份验证方式有哪些?Shiro提供了多种身份验证方式,可以根据具体需求选择合适的方式,包括:- 基于表单的身份验证:用户通过表单提交用户名和密码进行身份验证。
shiro是啥Shiro的核心组件介绍Shiro是一个强大且易用的Java安全框架,它提供了身份验证、授权、加密和会话管理等关键安全功能。
下面对Shiro的核心组件进行详细介绍:1. Subject:Subject是Shiro的核心概念,表示当前正在执行操作的用户。
Subject是一个抽象概念,可以是一个人、一个服务或者一个设备。
Subject可以执行身份验证、授权和会话等操作。
2. SecurityManager:SecurityManager是Shiro的核心组件,负责所有的安全操作。
它是Subject执行操作的入口点,并且管理所有的安全操作。
SecurityManager可以将身份验证、授权和会话管理等功能委托给相应的组件实现。
3. Authenticator:Authenticator负责验证Subject的身份信息。
Shiro支持多种身份验证方式,包括用户名/密码验证、证书验证和第三方认证等。
Authenticator使用配置好的Realm(下面会介绍)获取Subject的身份信息进行验证。
4. Authorizer:Authorizer负责授权操作。
在身份验证成功之后,Authorizer通过用户的角色和权限信息确定用户是否有权限执行特定的操作。
Authorizer使用配置好的Realm获取用户的角色和权限信息。
5. Realm:Realm是Shiro与应用程序进行交互的桥梁,负责获取应用程序保存的用户、角色和权限信息。
Shiro支持多种Realm实现,包括数据库、LDAP、Active Directory等。
开发者可以根据自己的需求选择不同的Realm实现。
6. SessionManager:SessionManager负责管理用户的会话信息。
Shiro可以将用户的会话信息存储在多种存储介质上,如内存、数据库或者缓存中。
SessionManager提供了会话的创建、销毁和管理等功能。
shiro反序列化原理
Shiro序列化技术是一种用于在计算机环境中存储和传输数据的技术,
它将数据结构或对象状态转换为可以在网络传输或保存在文件或其他
存储设备中的形式。
Shiro反序列化原理主要分为以下几点:
1. 编码信息:序列化是按照特定的格式(如XML、JSON、XHTML等)进行编码,以便将数据以可读的形式保存和传输,而反序列化就是根
据这些指定的编码原子进行解码,并将其反序列化为实际的数据结构。
2. 类型信息:序列化后的数据被编码成二进制文件,有个标识符强调
其是什么类型,方便反序列化时对其进行反序列化,例如标识符后面
跟一个object,可以对对象调用相应的构造函数。
3. 字段信息:反序列化的信息的字段描述是完整的,数据中包括发送
者序列化时的各种字段,使接收者可以获取相应的序列化数据内容信息。
4. 对象连接:Shiro的反序列化还包括将对象之间的引用进行反序列化,使得一个对象的反序列化过程完整,这些对象必须是事先已经定义好的,例如反序列化类本身,字段,父类等。
5. 安全信息:Shiro使用数字签名,编码技术,消息摘要,混淆等技术
来安全反序列化,以防止任何未经授权的篡改敏感数据。
6. 资源调度:在反序列化结束时,Shiro会检查资源使用情况,如文件、socket、数据库连接、内存使用量等,释放不再使用的资源,以保证新
的反序列化过程的顺利进行。
shiro的使用的步骤Shiro是一个开源的Java安全框架,用于简化应用程序的身份验证、授权、加密等安全操作。
它提供了一套易于使用的API和一系列可配置的组件,以帮助开发者快速实现安全功能。
下面是使用Shiro的一般步骤:1. 引入Shiro依赖:首先,我们需要在项目中引入Shiro的依赖库。
可以通过Maven或手动下载并添加到项目中。
例如,在Maven 项目中,可以在POM文件中添加以下依赖:xml<dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>1.8.0</version></dependency>2. 配置Shiro:在使用Shiro之前,我们需要配置Shiro的环境。
这包括配置安全策略、数据源、缓存等。
Shiro的配置可以通过properties文件、XML文件或编程方式进行。
- 配置文件方式:创建一个shiro.ini或shiro.xml文件,并配置相应的组件。
例如,定义一个基于用户名/密码的身份验证器:[main]myRealm = com.example.MyRealmsecurityManager.realms = myRealm[users]username=password- 编程方式:可以通过编写Java代码来配置Shiro的组件。
例如,以编程方式配置安全管理器:javaDefaultSecurityManager securityManager = new DefaultSecurityManager();securityManager.setRealm(new MyRealm());SecurityUtils.setSecurityManager(securityManager);3. 创建Realm:Realm是Shiro与应用程序数据交互的桥梁,用于身份验证、授权等操作。
shiro的常用注解一、引言Shiro是一个广泛使用的安全框架,它提供了强大的身份认证、授权和会话管理功能。
在Shiro中,注解是一种常用的机制,用于配置和定制应用程序的安全行为。
本文档将介绍Shiro中常用的注解,帮助读者更好地理解和使用Shiro框架。
二、常用注解介绍1. `@RequiresAuthentication`:该注解用于指示该方法必须通过身份认证才能执行。
在方法上添加此注解后,只有已通过身份认证的用户才能调用该方法。
2. `@RequiresGuest`:该注解用于指示该方法只允许未通过身份认证的用户执行。
在方法上添加此注解后,只有未通过身份认证的用户才能调用该方法。
3. `@SkipPermission`:该注解用于指示该方法无需进行权限检查。
在方法上添加此注解后,该方法将绕过权限检查,无论用户是否有执行该方法的权限。
4. `@Authenticated`:该注解用于指示另一个方法或类必须在身份认证完成后才能执行。
在需要等待身份认证的方法上添加此注解,可以确保只有经过身份认证的用户才能进入相关逻辑。
5. `@SessionValidation`:该注解用于指定一个方法,当会话创建时会自动调用该方法进行验证。
可以在方法上添加此注解,并在其中编写必要的验证逻辑。
6. `@Access`:该注解用于控制对资源的访问,支持多种控制方式,如需要验证用户角色、时间限制等。
通过设置不同的属性,可以实现不同的访问控制逻辑。
7. `@AuthenticatedUser`:该注解用于指定已通过身份认证的用户作为方法的参数或返回值。
可以在方法参数上添加此注解,以便在方法执行时自动将已认证的用户传递给方法。
三、使用示例以下是一个使用Shiro注解的示例代码:```javaimportorg.apache.shiro.authz.annotation.RequiresAuthentication;import org.apache.shiro.authz.annotation.RequiresGuest;import org.apache.shiro.authz.annotation.SkipPermission;import org.apache.shiro.session.Session;import able;importorg.springframework.beans.factory.annotation.Autowired;import ponent;@Componentpublic class UserService implements Nameable {@Autowiredprivate Session session;// 示例方法1:必须通过身份认证才能执行@RequiresAuthenticationpublic void method1() {// 执行需要身份认证的逻辑}// 示例方法2:只允许未通过身份认证的用户执行@RequiresGuestpublic void method2() {// 执行不需要身份认证的逻辑}// 示例方法3:跳过权限检查的接口方法@SkipPermission("viewDetails")public void method3() {// 执行需要验证权限的方法,无需检查是否具有“viewDetails”权限}}```四、总结本文档介绍了Shiro框架中常用的注解,包括`@RequiresAuthentication`、`@RequiresGuest`、`@SkipPermission`等。
首先要介绍一下shiro反序列化无利用链的概念。
Shiro是一个用于身份验证、授权、加密和会话管理的强大框架,它支持反序列化来实现特定功能。
然而,由于反序列化本身的特性,可能存在一些安全风险,比如无利用链。
所谓无利用链,是指在某些情况下,反序列化漏洞虽然存在,但无法直接利用来获取权限。
要想在shiro反序列化无利用链中拿权限,需要先了解shiro反序列化漏洞的原理。
一般来说,shiro反序列化漏洞是由于用户传入恶意序列化数据导致的。
攻击者利用这个漏洞可以在反序列化过程中执行恶意代码,从而获取权限。
在了解了漏洞的原理之后,我们就可以开始针对无利用链的拿权限方法进行探讨。
针对shiro反序列化无利用链的拿权限方法,一种常见的做法是利用反序列化漏洞构建恶意序列化数据,然后通过一系列的操作和技巧来获取权限。
这可能包括利用shiro框架的特性,比如会话管理、身份验证、授权等来实现特定的攻击手法。
还可以结合其他安全漏洞或者利用一些高级的攻击技术来实现拿权限的目的。
总体来说,针对shiro 反序列化无利用链的拿权限方法是一个复杂且需要深入理解shiro框架的过程。
在文章中,我会从简单到复杂地介绍shiro反序列化无利用链的拿权限方法。
我将会结合具体的实例和案例进行分析,以便读者更加深入地理解。
我也会共享一些个人观点和理解,帮助读者更好地理解这个主题。
希望本文能够帮助读者对shiro反序列化无利用链的拿权限方法有一个全面、深刻和灵活的理解。
同时也希望能引发读者对于安全领域的更深入思考和讨论。
Shiro是一个非常流行的Java安全框架,用于身份验证、授权、加密和会话管理。
它的强大功能和灵活性使得它成为许多Java应用程序的首选安全解决方案。
然而,随着反序列化漏洞的不断暴露,Shiro也面临着一些安全挑战。
在Shiro中,反序列化漏洞是一种常见的安全问题。
攻击者可以利用这些漏洞构建恶意序列化数据,并在反序列化的过程中执行恶意代码,从而获取权限。
shiro反序列化无利用链的拿权限方法反序列化无利用链的拿权限方法通常是指绕过安全限制,直接通过反序列化攻击获取目标系统的权限。
在这种攻击中,攻击者利用被序列化的对象中的安全漏洞,控制目标系统并执行恶意操作。
下面是一些常见的反序列化攻击方法:1.反序列化漏洞介绍:反序列化漏洞是由于未正确验证、过滤或处理反序列化数据而导致的安全漏洞。
攻击者可以篡改反序列化数据,从而执行恶意代码,控制系统。
2.寻找目标:3.查找可利用的类:在目标系统中查找可以被恶意利用的可序列化类。
这些类通常具有反序列化操作,并且可能包含敏感信息或可执行不受信任的代码。
4.构造恶意序列化数据:使用逆向工程或分析目标系统中的代码来构造恶意序列化数据。
可以通过修改或篡改已有的序列化数据,以达到执行任意代码的目的。
攻击者可以替换需要反序列化的对象,以执行自定义的恶意代码。
6.利用已知的漏洞:7.绕过反序列化防护机制:在一些情况下,目标系统可能会针对反序列化漏洞进行防护措施,例如配置安全策略文件、使用反序列化过滤器等。
攻击者需要寻找绕过这些保护机制的方法,以成功执行反序列化攻击。
8.隐蔽性与持久性:为了不被发现,攻击者通常会选择隐蔽性高的方式进行攻击,例如利用已存在的反序列化逻辑、使用已知的库或框架等。
此外,攻击者还可以结合其他攻击方式,以增加攻击持久性,例如添加后门、提权等。
需要注意的是,反序列化攻击是一种高级的攻击技术,攻击者需要具备深入的理解和知识来执行此类攻击。
因此,建议开发人员在编写代码时要注意反序列化漏洞,并采取适当的防护措施,如验证和过滤反序列化数据、使用专业的序列化库等,以保护系统免受此类攻击的威胁。
shiro反序列化原理
Shiro反序列化是Apache Shiro框架中的一种安全机制,用于防止网络攻击者在反序列化过程中窃取用户的敏感信息。
Shiro反序列化的目的是保护反序列化过程中的安全和隐私,以避免攻击者利用可能可以破坏系统的敏感信息进行攻击。
Shiro反序列化的实现方式主要有两种:一种是使用Java的安全性API(如Java Cryptography Extension)来实现;另一种是使用Shiro 的安全性策略,来确保反序列化过程中的安全性和隐私保护。
Shiro反序列化的实现采用Java Cryptography Extension(JCE)API,这是一种用于实现加密和解密的标准API。
这种方式使得在反序列化过程中,只有拥有可靠的密钥才能解密数据,从而保护数据的安全性和隐私。
Shiro还可以使用它自己的安全性策略来实现反序列化,这种方式支持对象的访问控制和安全性策略,以确保反序列化过程中的安全性和隐私保护。
Shiro的安全性策略可以防止攻击者在反序列化时获取他们没有授权访问的数据,从而保护数据的安全性和隐私。
Shiro反序列化还可以使用白名单,以确保反序列化过程中只有符合白名单规则的类才能被反序列化。
这样可以有效的防止攻击者利用恶意类来破坏系统,以及窃取用户的敏感信息。
Shiro反序列化是Apache Shiro框架中的一种安全机制,旨在防止攻击者利用反序列化过程中可能可以破坏系统的敏感信息进行攻击,保护反序列化过程中的安全和隐私。
Shiro反序列化主要使用JCE API和Shiro的安全性策略,以及白名单。
有效的使用这些技术,可以有效的保护系统的安全性和隐私,确保反序列化过程中的安全性和隐私保护。
shiro的原理Shiro 是一个强大且易于使用的 Java 安全框架,用于身份验证、授权以及会话管理。
它提供了一种全面的解决方案,可以在应用程序中实现安全性和权限控制。
Shiro 的核心原理是通过客户端(例如浏览器)发送请求到应用程序,应用程序通过 Shiro 过滤器链对请求进行拦截和处理。
Shiro 过滤器链由一系列过滤器组成,每个过滤器都是一个独立的组件,负责执行特定的功能。
Shiro 的主要原理包括:Subject、Realm、Authentication、Authorization 和 Session Management。
1. Subject:Subject 是 Shiro 的核心概念,表示当前与应用程序交互的用户。
Subject 封装了与用户相关的操作,包括身份验证、授权和会话管理等。
Subject 可以是一个用户、一个服务器或者其他实体。
2. Realm:Realm 是 Shiro 的身份验证和授权数据源。
它充当了关键的桥梁,将应用程序和 Shiro 的数据库连接起来。
Realm 从数据源(如数据库)中获取用户信息并将其提供给 Shiro 进行验证和授权操作。
3. Authentication:Authentication 是身份验证的过程,Shiro 提供了多种身份验证机制(如用户名/密码、OAuth、LDAP等)。
在身份验证过程中,Shiro 会将用户提供的凭据与数据源中存储的凭据进行比较,并确认用户的身份。
4. Authorization:Authorization 是授权的过程,即决定用户是否有权限执行一些操作。
Shiro 使用一套基于角色的授权模型,将用户分组到不同的角色中,并为每个角色分配相应的权限。
通过判断用户的角色和权限,Shiro 可以确定用户是否有权访问一些资源或执行一些操作。
5. Session Management:Session Management 是会话管理的过程,用于跟踪用户的状态和活动。
Shiro学习
Shiro简介
Apache Shiro是java的安全框架。
Shiro可以非常容易的开发出足够好的应用,可以帮我们完成:认证、授权、加密、会话管理、与Web集成、缓存等。
Authentication:身份认证/登录,验证用户是不是拥有相应的身份;
Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。
或者细粒度的验证某个用户对某个资源是否具有某个权限;
Session Manager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通JavaSE环境的,也可以是如Web环境的;Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;Web Support:Web支持,可以非常容易的集成到Web环境;
Caching:缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以提高效率;
Concurrency:shiro支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去;
Testing:提供测试支持;
Run As:允许一个用户假装为另一个用户(如果他们允许)的身份进行访问;Remember Me:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了。
记住一点,Shiro不会去维护用户、维护权限;这些需要我们自己去设计/提供;然后通过相应的接口注入给Shiro即可。
2.身份验证
1、首先准备一些用户身份/凭据(shiro.ini)
Java代码
2、测试用例(com.github.zhangkaitao.shiro.chapter2.LoginLogoutTest)Java代码
2、调用Subject.login进行登录,如果失败将得到相应的AuthenticationException异常,根据异常提示用户错误信息;否则登录成功;
3、最后调用Subject.logout进行退出操作。
如上测试的几个问题:
1、用户名/密码硬编码在ini配置文件,以后需要改成如数据库存储,且密码需要加密存储;
2、用户身份Token可能不仅仅是用户名/密码,也可能还有其他的,如登录时允许用户名/邮箱/手机号同时登录。
3.授权
3.1Shiro的三种方式授权
编程式:通过写if/else授权代码块完成
Subject subject=SecuriryUtils.getSubject();
If(subject.hasRole(“admin”)){
//有权限
}else{
//无权限
}
注解式:通过在执行的java方法上放置相应的注解完成
@RequiresRoles(“admin”)
Public void hello(){
//有权限
}
JSP/GSP标签:在JSP/GSP页面通过相应的标签完成
<shiroLhasRole name=”admin”>
<!--有权限—>
</shiro:hasRole>
3.2 授权
基于角色的访问控制(隐式角色)
1、在ini配置文件配置用户拥有的角色(shiro-role.ini)
Java代码
1.[users]
2.zhang=123,role1,role2
2、测试用例(com.github.zhangkaitao.shiro.chapter3.RoleTest)Java代码
hashAnyRole用于判断是否有某些权限中的某一个。
Java代码
1、单个资源单个权限
Java代码
ini配置文件
Java代码
然后通过如下代码判断
Java代码
ini配置(表示角色4拥有system:user资源的update和delete权限)Java代码
接着可以通过如下代码判断
Java代码
ini配置
Java代码
然后通过如下代码判断
Java代码
ini配置文件(表示角色5拥有system:user的所有权限)Java代码
也可以简写为(推荐上边的写法):
Java代码
然后通过如下代码判断
Java代码
ini配置
Java代码
然后通过如下代码判断
Java代码
ini配置
Java代码
Java代码
ini配置
Java代码
然后通过如下代码判断Java代码
ini配置
Java代码
然后通过如下代码判断Java代码
ini配置
Java代码
然后通过如下代码判断Java代码
ini配置
Java代码
然后通过如下代码判断Java代码
如下两种方式是等价的:Java代码
3.4 授权流程
流程如下:
1、首先调用Subject.isPermitted*/hasRole*接口,其会委托给SecurityManager,而SecurityManager接着会委托给Authorizer;
2、Authorizer是真正的授权者,如果我们调用如isPermitted(“user:view”),其首先会通过PermissionResolver把字符串转换成相应的Permission实例;
3、在进行授权之前,其会调用相应的Realm获取Subject相应的角色/权限用于匹配传入的角色/权限;
4、Authorizer会判断Realm的角色/权限是否和传入的匹配,如果有多个Realm,会委托给ModularRealmAuthorizer进行循环判断,如果匹配如isPermitted*/hasRole*会返回true,否则返回false表示授权失败。
ModularRealmAuthorizer进行多Realm匹配流程:
1、首先检查相应的Realm是否实现了实现了Authorizer;
2、如果实现了Authorizer,那么接着调用其相应的isPermitted*/hasRole*接口进行匹配;
3、如果有一个Realm匹配那么将返回true,否则返回false。
如果Realm进行授权的话,应该继承AuthorizingRealm,其流程是:
1.1、如果调用hasRole*,则直接获取AuthorizationInfo.getRoles()与传入的角色比较即可;
1.2、首先如果调用如isPermitted(“user:view”),首先通过PermissionResolver将权限字符串转换成相应的Permission实例,默认使用WildcardPermissionResolver,即转换为通配
我们可以通过如下ini配置更改Authorizer实现:
Java代码
实现了PermissionResolverAware接口),如:
Java代码
上(其实现了RolePermissionResolverAware接口),如:Java代码
1、ini配置(shiro-authorizer.ini)
Java代码
Java代码
看(二进制:1000);如 +user+10 表示对资源user拥有修改/查看权限。
Java代码
Java代码
RolePermissionResolver用于根据角色字符串来解析得到权限集合。
Java代码
4、自定义Realm
Java代码
5、测试用例Java代码
4.INI配置
4.1 根对象SecurityManager
从之前的Shiro架构图可以看出,Shiro是从根对象SecurityManager进行身份验证和授权的;也就是所有操作都是自它开始的,这个对象是线程安全且真个应用只需要一个即可,因此Shiro提供了SecurityUtils让我们绑定它为全局的,方便后续操作。
因为Shiro的类都是POJO的,因此都很容易放到任何IoC容器管理。
但是和一般的IoC 容器的区别在于,Shiro从根对象securityManager开始导航;Shiro支持的依赖注入:public 空参构造器对象的创建、setter依赖注入。
(com.github.zhangkaitao.shiro.chapter4.NonConfigurationCreateTest):Java代码
2.1、等价的INI配置(shiro-config.ini)
Java代码
2.2、Java代码(com.github.zhangkaitao.shiro.chapter4.ConfigurationCreateT est)Java代码
性,key是每个部分不重复即可,而不是整个配置文件。
如下是INI配置分类:Java代码
创建对象
Java代码
常量值setter注入Java代码
对象引用setter注入Java代码
嵌套属性setter注入Java代码
byte数组setter注入Java代码
Array/Set/List setter注入
Java代码
Map setter注入
Java代码
实例化/注入顺序
Java代码
配置用户名/密码及其角色,格式:“用户名=密码,角色1,角色2”,角色部分可省略。
如:Java代码
配置角色及权限之间的关系,格式:“角色=权限1,权限2”;如:
Java代码
配置url及相应的拦截器之间的关系,格式:“url=拦截器[参数],拦截器[参数],如:Java代码。