Shiro-用户手册
- 格式:docx
- 大小:225.15 KB
- 文档页数:24
一、介绍:shiro是apache提供的强大而灵活的开源安全框架,它主要用来处理身份认证,授权,企业会话管理和加密。
shiro功能:用户验证、用户执行访问权限控制、在任何环境下使用session API,如cs程序。
可以使用多数据源如同时使用oracle、mysql。
单点登录(sso)支持。
remember me服务。
详细介绍还请看官网的使用手册:/reference.html与spring security区别,个人觉得二者的主要区别是:1、shiro灵活性强,易学易扩展。
同时,不仅可以在web中使用,可以工作在任务环境内中。
2、acegi灵活性较差,比较难懂,同时与spring整合性好。
如果对权限要求比较高的项目,个人建议使用shiro,主要原因是可以很容易按业务需求进行扩展。
附件是对与shiro集成的jar整合及源码。
二、shiro与spring集成shiro默认的配置,主要是加载ini文件进行初始化工作,具体配置,还请看官网的使用手册(/web.html)init文件不支持与spring的集成。
此处主要是如何与spring及springmvc集成。
1、web.xml中配置shiro过滤器,web.xml中的配置类使用了spring的过滤代理类来完成。
Xml代码2、在spring中的application.xml文件中添加shiro配置:Java代码anon org.apache.shiro.web.filter.authc.AnonymousFilterauthc org.apache.shiro.web.filter.authc.FormAuthenticatio nFilterauthcBasic org.apache.shiro.web.filter.authc.BasicHttpAuthenti cationFilterlogout org.apache.shiro.web.filter.authc.LogoutFilternoSessionCrea tion org.apache.shiro.web.filter.session.NoSessionCreati onFilterperms org.apache.shiro.web.filter.authz.PermissionsAuthor izationFilterport org.apache.shiro.web.filter.authz.PortFilterrest org.apache.shiro.web.filter.authz.HttpMethodPermiss ionFilterroles org.apache.shiro.web.filter.authz.RolesAuthorizatio nFilterssl org.apache.shiro.web.filter.authz.SslFilter user erFilter∙∙anon:例子/admins/**=anon 没有参数,表示可以匿名使用。
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入门●Apache Shiro 是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能。
●Shiro的功能:认证:验证用户来核实他们的身份授权:对用户执行访问控制,如:判读用户是否被分配了一个确定的安全角色判读用户是否被允许做某事会话管理:在任何环境下使用Session API,即使没有Web或EJB容器。
加密:以更加简洁易用的方式使用加密的功能,保护或隐藏数据防止被偷窥Realms:聚集一个或多个用户安全数据的数据源,并作为一个单一的复合用户“视图”。
启用单点登录(SSO)功能。
为没有关联到登录的用户启用“Remember Me”服务。
●Shiro的四大部分——身份验证,授权,会话管理和加密Authentication:有时也简称为“登录”,这是证明用户是他们所说的他们是谁的行为。
Authorization:访问控制的过程,也就是绝对“谁”去访问“什么”。
Session Management:管理用户特定的会话,即使再非Web或EJB应用程序。
Cryptography:通过使用加密算法保持数据安全同时易于使用。
●Shiro提供的扩展功能:Web Support:主要针对web应用提供一些常用功能。
Caching:缓存可以使应用程序运行更有效率。
Testing:帮助我们进行测试相关功能。
“Run AS”:一个允许用户假设为另一个用户身份(如果允许)的功能,有时候在管理脚本很有用。
“Remember Me”:记住用户身份,提供类似购物车功能。
●Shiro的高层概览架构SubjectSubject实质上是一个当前执行用户的特定的安全“视图”。
Subject可以是一个人,也可以是代表第三方服务,或其他类似的任何东西——基本上是当前正与软件进行交互的任何东西。
所以Subject实例都被绑定到(且这是必须的)一个SecurityManager上。
当你与一个Subject交互时,那些交互作用转化为与SecurityManager交互的特定Subject的交互作用。
shiro 常用方法English:Shiro is a powerful and flexible open-source security framework that provides comprehensive security features for Java applications. It offers a wide range of commonly used methods for securing applications, including authentication, authorization, session management, and cryptography. One of the most commonly used methods in Shiro is authentication, which verifies the identity of users attempting to access the application. This can be achieved through various authentication mechanisms such as username and password authentication, token-based authentication, and multi-factor authentication. Shiro also provides a robust authorization mechanism that controls access to different parts of the application based on the user's roles and permissions. Session management in Shiro ensures the secure handling of user sessions, including the ability to manage session timeout, invalidate sessions, and store session data securely. Additionally, Shiro offers support for various cryptographic functions such as encryption and hashing to safeguard sensitive information within the application. Overall, Shiro's rich setof features and commonly used methods make it a popular choice for securing Java applications.中文翻译:Shiro是一个功能强大而灵活的开源安全框架,为Java应用程序提供全面的安全功能。
shiro 方法级权限配置Apache Shiro 是一个强大且易用的Java 安全框架,提供身份验证、授权、加密和会话管理功能。
在 Shiro 中,你可以使用方法级权限配置来控制对特定方法的访问。
以下是一个简单的 Shiro 方法级权限配置示例:1. 定义权限首先,你需要定义一些权限。
这些权限通常与业务功能或操作相关。
例如:```javapublic interface MyAppPermissions {String VIEW_USER = "viewUser";String MODIFY_USER = "modifyUser";}```2. 定义安全策略接下来,你需要定义一个安全策略,它将与你的方法权限关联。
这个策略决定哪些用户或角色可以执行特定的操作。
```javapublic class MyAppSecurityManager extends DefaultSecurityManager {// ... 其他代码 ...Overrideprotected boolean permits(Subject subject, Object o, Object o1) { if (o instanceof MyAppPermissions) {MyAppPermissions permission = (MyAppPermissions) o;return (o1);} else {return false;}}}```3. 配置 Shiro在 Shiro 的配置文件中(例如 ``),你需要定义你的安全策略和相关的授权信息。
例如:```java[main]myAppSecurityManager =myAppRealm == $myAppRealm```4. 授权在你的 Shiro 配置中,你可以使用 `[urls]` 部分来定义 URL 路径和相应的权限。
Shiro是一个轻量级的Java安全框架,能够实现身份认证、授权、会话管理和加密等功能,通过Subject、SecurityManager和Realms这三大核心组件实现。
该框架可以使用INI或者XML、YMAL、JSON等配置文件进行配置,而且支持与SpringMVC集成,可以帮助我们更加方便地开发安全的Web应用程序。
在Shiro中,Subject负责代表用户的身份,管理用户的认证和授权,而SecurityManager则是整个框架的核心,管理Subject的认证和授权操作。
另外,Shiro 的Realms实现了对用户身份的验证,而其内置的Authorizer类能够灵活地实现授权操作。
Shiro主要有以下功能特点和用法:1. 身份认证:通过使用Subject和SecurityManager,Shiro能够对用户进行认证和授权,可以通过令牌等方式进行身份认证。
2. 授权:Shiro的Authorizer类继承自AuthenticationgRealm,能够实现更加灵活的授权功能,它需要解析器PermissionResolver 和RolePermissionResolver。
3. 会话管理:Shiro的sessionManager能够实现会话管理,比如使用Shiro的rememberMe服务和单点登录等功能,方便用户的操作。
4. 加密:Shiro的加密功能是通过加密键、哈希算法、AES等加密技术来保护用户的数据,保证用户数据的安全。
使用Shiro的优点:1. 提供了认证、授权和会话管理的功能,使应用程序更加安全和便捷。
2. 可扩展性强,支持多种不同的数据源,如jdbc、LDAP等。
3. 配置简单,易于使用和管理,只需简单的配置,就能够实现对用户身份认证、权限授权等功能。
安全防范:1. 密码加密:Shiro通过使用md5加密算法等方式对用户密码进行加密,以保护用户的密码安全。
2. 权限控制:Shiro采用角色权限的方式进行权限控制,防止数据被越权访问。
shiro 登录原理-概述说明以及解释1.引言1.1 概述Shiro是一个强大而灵活的Java安全框架,用于处理身份认证、授权、密码加密等安全相关的任务。
它提供了一个简单而直观的编程界面,使开发人员能够轻松地集成安全性到他们的应用程序中。
在当今互联网的时代,随着用户数量和敏感信息的增加,保护用户信息和确保系统的安全性变得尤为重要。
实施有效的身份验证和授权机制是确保系统安全的关键环节之一。
Shiro框架作为一种解决方案,致力于为Java应用程序提供可靠的安全性支持。
Shiro的设计理念是简单易用,同时又具备高度的灵活性和可扩展性。
无论是基本的用户名/密码认证,还是复杂的多因素认证,Shiro都能满足各种安全需求。
它支持多种认证机制,如表单登录、基本认证、证书认证等,同时还可以集成第三方身份提供者,如LDAP、Active Directory等。
在完成身份认证之后,Shiro还提供了授权机制,可以根据不同用户的权限对资源进行访问控制。
本文将重点介绍Shiro的登录认证过程和相关原理。
首先,我们会对Shiro框架本身进行简要的介绍,了解其主要特点和功能。
接着,我们将详细解析Shiro的登录认证流程,包括用户身份验证和授权过程。
最后,我们将总结Shiro登录原理的重要性,并展望其在应用和发展方面的前景。
通过本文的阅读,读者将会了解到Shiro框架在身份认证和授权方面的核心机制,以及如何在实际项目中应用Shiro来保护系统的安全性。
同时,读者也能够对Shiro的未来发展进行展望,进一步认识到其在安全领域中的重要性和潜力。
文章结构部分的内容如下:1.2 文章结构本文将分为三个主要部分,分别是引言、正文和结论。
引言部分将首先概述本文将要探讨的主题——shiro 登录原理,并介绍文章的结构和目的。
通过对引言的阅读,读者将对本文的内容有一个整体的了解。
正文部分将详细介绍shiro框架的基本概念和原理、shiro登录认证过程以及shiro登录原理解析。
Apache Shiro Reference DocumentationApache S hiro简介什么是 Apache Shiro?Apache Shiro 是一个强大而灵活的开源安全框架,它干净利落地处理身份认证,授权,企业会话管理和加密。
Apache Shiro 的首要目标是易于使用和理解。
安全有时候是很复杂的,甚至是痛苦的,但它没有必要这样。
框架应该尽可能掩盖复杂的地方,露出一个干净而直观的API,来简化开发人员在使他们的应用程序安全上的努力。
以下是你可以用Apache Shiro 所做的事情:•验证用户来核实他们的身份•对用户执行访问控制,如:•判断用户是否被分配了一个确定的安全角色•判断用户是否被允许做某事•在任何环境下使用Session API,即使没有Web 或EJB 容器。
•在身份验证,访问控制期间或在会话的生命周期,对事件作出反应。
•聚集一个或多个用户安全数据的数据源,并作为一个单一的复合用户“视图”。
•启用单点登录(SSO)功能。
•为没有关联到登录的用户启用"Remember Me"服务…以及更多——全部集成到紧密结合的易于使用的API 中。
Shiro 视图在所有应用程序环境下实现这些目标——从最简单的命令行应用程序到最大的企业应用,不强制依赖其他第三方框架,容器,或应用服务器。
当然,该项目的目标是尽可能地融入到这些环境,但它能够在任何环境下立即可用。
Apache Shiro的特点Apache Shiro 是一个拥有许多功能的综合性的程序安全框架。
下面的图表展示了Shiro 的重点,并且这个参考手册也会与之类似的被组织起来:任何ApplicationApache Shiro 从开始的那天起就被设计成能够支持任何应用程序——从最小的命令行应用程序到最大的群集 Web 应用程序。
即使我们为该教程创建的是一个简单的应用,了解相同的使用模式适用于无论你的应用程序是怎样创建的及它被部署到哪里。
apache shiro入门Apache Shiro 是一个框架,可用于身份验证和授权。
本文提供了几个示例用来展示如何在Java™ 应用程序中使用Shiro 并给出了如何在一个Grails web 应用程序中使用它的概述。
为了从本文中最大限度地受益,您应该习惯于创建Java 应用程序并安装了如下的几个组件:●Java 1.6 JDK●Grails(用来运行这些web 应用程序示例)身份验证和授权在对系统进行安全保障时,有两个安全性元素非常重要:身份验证和授权。
虽然这两个术语代表的是不同的含义,但出于它们在应用程序安全性方面各自的角色考虑,它们有时会被交换使用。
身份验证指的是验证用户的身份。
在验证用户身份时,需要确认用户的身份的确如他们所声称的那样。
在大多数应用程序中,身份验证是通过用户名和密码的组合完成的。
只要用户选择了他人很难猜到的密码,那么用户名和密码的组合通常就足以确立身份。
但是,还有其他的身份验证方式可用,比如指纹、证书和生成键。
一旦身份验证过程成功地建立起身份,授权就会接管以便进行访问的限制或允许。
所以,有这样的可能性:用户虽然通过了身份验证可以登录到一个系统,但是未经过授权,不准做任何事情。
还有一种可能是用户虽然具有了某种程度的授权,却并未经过身份验证。
在为应用程序规划安全性模型时,必须处理好这两个元素以确保系统具有足够的安全性。
身份验证是应用程序常见的问题(特别是在只有用户和密码组合的情况下),所以让框架来处理这项工作是一个很好的做法。
合理的框架可提供经过测试和维护的优势,让您可以集中精力处理业务问题,而不是解决其解决方案已经实现的问题。
Apache Shiro 提供了一个可用的安全性框架,各种客户机都可将这个框架应用于它们的应用程序。
本文中的这些例子旨在介绍Shiro 并着重展示对用户进行身份验证的基本任务。
了解ShiroShiro 是一个用Java 语言实现的框架,通过一个简单易用的API 提供身份验证和授权。
Shiro1.1.0开发配置文档建立一个java应用程序项目,项目及文件结构如图:注意以下几点:1、导入与Shiro相关的库,如图所示几个jar包,如运行时出现log4j相关的错误,则可能是log4j相关的包不正确;2、shiro.ini文件的路径问题,应放在项目根路径下,内容为:view plain1.[users]2.zwx=zavens3、log4j.properties文件为可选文件,建议自己设置log4j属性,内容为:view plain1.log4j.rootLogger=TRACE, stdout2.3.log4j.appender.stdout=org.apache.log4j.DailyRollingFileAppender4.log4j.appender.stdout.File=C:/log4j/log.txt5.log4j.appender.stdout.Encoding=GBK6.log4j.appender.stdout.Threshold=DEBUG7.log4j.appender.stdout.DatePattern='.'yyyy-MM-ddyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L : %m%n10..sf.ehcache=WARN.apache=WARN.quartz=WARN.apache.shiro=TRACE.apache.shiro.util.ThreadContext=INFO4、shiroAp.java内容:view plain1.package shiroap;2.3.import java.io.File;4.import java.io.IOException;5.import org.apache.shiro.SecurityUtils;6.import ernamePasswordToken;7.import org.apache.shiro.config.IniSecurityManagerFactory;8.import org.apache.shiro.mgt.SecurityManager;9.import org.apache.shiro.subject.Subject;10.import org.apache.shiro.util.Factory;11.12.public class ShiroAp {13.14.public static void main(String[] args) throws IOException {15. Factory<SecurityManager> factory = new IniSecurityManagerFactory("shiro.ini");16. SecurityManager sm=factory.getInstance();17. SecurityUtils.setSecurityManager(sm);18. Subject sub=SecurityUtils.getSubject();19.if(sub.isAuthenticated()){20. System.out.println("已登录,SESSION:" + sub.getSession());21. }22. System.out.println("未登录,SESSION:" + sub.getSession());23. UsernamePasswordToken at=new UsernamePasswordToken ("zwx","zavens");24.try{25. sub.login(at);26. }catch(Exception e){27. System.out.println("验证没通过!");28. }29.if(sub.isAuthenticated()){30. System.out.println("已登录,SESSION:" + sub.getSession());31. }32. }33.}Shiro是一个简单、开源且强大的安全管理框架,是实现单点登录的理想选择,常被应用于java web应用中。
Shiro用户手册Shiro架构介绍一、什么是ShiroApache Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能:* 认证-用户身份识别,常被称为用户登录”«授权-访问控制;* 密码加密-保护或隐藏数据防止被偷窥;* 会话管理-每用户相关的时间敏感的状态。
对于任何一个应用程序,Shiro都可以提供全面的安全管理服务。
并且相对于其他安全框架, Shiro要简单的多。
Shiro的架构介绍Subject :即当前操作用户”但是,在Shiro中,Subject这一概念并不仅仅指人,也可以是第三方进程、后台帐户(Daemon Accou nt )或其他类似事物。
它仅仅意味着当前跟软件交互的东西”。
但考虑到大多数目的和用途,你可以把它认为是Shiro的用户”概念。
Subject代表了当前用户的安全操作,SecurityManager则管理所有用户的安全操作。
SecurityManager :它是Shiro 框架的核心,典型的Facade 模式,Shiro 通过SecurityManager来管理内部组件实例,并通过它来提供安全管理的各种服务。
Realm : Realm充当了Shiro与应用安全数据间的桥梁”或者连接器”。
也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro会从应用配置的Realm中查找用户及其权限信息。
从这个意义上讲,Realm实质上是一个安全相关的DAO :它封装了数据源的连接细节,并在需要时将相关数据提供给Shiro。
当配置Shiro时,你必须至少指定一个Realm,用于认证和(或)授权。
配置多个Realm是可以的,但是至少需要一个。
Shiro内置了可以连接大量安全数据源(又名目录)的Realm,如LDAP、关系数据库(JDBC )、类似INI的文本配置资源以及属性文件等。
如果缺省的Realm不能满足需求,你还可以插入代表自定义数据源的自己的Realm实现。
Shiro完整架构图:除前文所讲 Subject 、SecurityManager 、Realm 三个核心组件外,Shiro 主要组件还包括:Authe nticator :认证就是核实用户身份的过程。
这个过程的常见例子是大家都熟悉的 用户/密码”组合。
多数用户在登录软件系统时,通常提供自己的用户名(当事人)和支持他们的 密码(证书)。
如果存储在系统中的密码(或密码表示)与用户提供的匹配,他们就被认为 通过认证。
Authorizer :授权实质上就是访问控制-控制用户能够访问应用中的哪些内容, 比如资源、Web 页面等等。
Sessio nMan ager :在安全框架领域,Apache Shiro 提供了一些独特的东西:可在任何应用或架构层一致地使用 Session API 。
即,Shiro 为任何应用提供了一个会话编程范式 -从小型后台独立应用到大型集群Web 应用。
这意味着,那些希望使用会话的应用开发者,不必被迫使用Servlet 或EJB 容器了。
或者,如果正在使用这些容器,开发者现在也可以选择 使用在任何层统——致的会话API ,取代Servlet 或EJB 机制。
CacheManager :对Shiro 的其他组件提供缓存支持。
Web MVC^Subjsct) 日町Local / In*ProcessVM / Network BoundsSecurity ManagerAuthenticatorAuthorizergRDBMS LDAPPrDpri&tai^Standalone ApplicationAcbveDirectoryAuthentication^ _ Sti^LegyJSession ManagerRflx SikBrlight Swing (^Subjed)C/C++ C# .NE TMemory, RDBMS, p 旳 Tata 已 etc.Cache ManagerSessionDAO{cache)Pluggable Realms (1 or more) JDflC Rea mLDAPRealm @auh jCuytOTT i Raa )mShiro认证认证就是验证用户身份的过程。
在认证过程中,用户需要提交实体信息(Principals)和凭据信息(Credentials)以检验用户是否合法。
最常见的实体/凭证”组合便是用户名/密码”组合。
亠、Shiro认证过程1、收集实体/凭据信息Java代码曲1. //Example using most common scenario of username/password pair:2. UsernamePasswordToken token = new UsernamePasswordToken(username, password);3. // ” Rememb Me" built-in:4. token.setRememberMe( true );UsernamePasswordToke n 支持最常见的用户名/密码的认证机制。
同时,由于它实现了RememberMeAuthenticationToken 接口,我们可以通过令牌设置记住我"的功能。
但是,已记住”和已认证”是有区别的:已记住的用户仅仅是非匿名用户,你可以通过subject.getPri ncipals()获取用户信息。
但是它并非是完全认证通过的用户,当你访问需要认证用户的功能时,你仍然需要重新提交认证信息。
这一区别可以参考亚马逊网站,网站会默认记住登录的用户,再次访问网站时,对于非敏感的页面功能,页面上会显示记住的用户信息,但是当你访问网站账户信息时仍然需要再次进行登录认证。
2、提交实体/凭据信息Java代码理1. Subject currentUser = SecurityUtils.getSubject();2. currentUser」o gin(token);收集了实体/凭据信息之后,我们可以通过SecurityUtils工具类,获取当前的用户,然后通过调用login方法提交认证。
如果login 方法执行完毕且没有抛出任何异常信息,那么便认为用户认证通过。
之后在应用 程序任意地方调用 SecurityUtils.getSubject()都可以获取到当前认证通过的用户实例,使用subject.isAuthe nticated() 判断用户是否已验证都将返回true.相反,如果login 方法执行过程中抛出异常,那么将认为认证失败。
Shiro 有着丰富的层次鲜明的异常类来描述认证失败的原因,如代码示例。
】、登出操作登出操作可以通过调用 subject.logout()来删除你的登录信息,如://removes all identifying information and invalidate当执行完登出操作后, Session 信息将被清空,subject 将被视作为匿名用户。
三、认证内部处理机制以上,是Shiro 认证在应用程序中的处理过程, 下面将详细解说 Shiro 认证的内部处理机制。
3、认证处理Java 代码1.tr y / { 2.currentUser.login(token);3. } catch ( UnknownAccountException uae ) {...4. } catch ( IncorrectCredentialsException ice ) {5. } catch ( LockedAccountException lae ) {...6. } catch ( ExcessiveAttemptsException eae ) {,7. }.catch your own ...8.} catch ( AuthenticationException ae ) {9.//unexpected error?10. }1.currentUser 」ogout();s their session too.Java 代码如上图,我们通过 Shiro 架构图的认证部分,来说明 Shiro 认证内部的处理顺序: 1、 应用程序构建了一个终端用户认证信息的 Authe nticati on Toke n 实例后,调用Subject.logi n 方法。
2、 Sbuject 的实例通常是 DelegatingSubject 类(或子类)的实例对象,在认证开始时,会 委托应用程序设置的securityManager 实例调用securityManager.login (token ) 方法。
3、 SecurityManager 接受到token (令牌)信息后会委托内置的 Authenticator 的实例(通常 都是 ModularRealmAuthenticator 类的实例)调用 authenticator.authenticate (token ). ModularRealmAuthenticator在认证过程中会对设置的一个或多个Realm 实例进行适配,它实际上为Shiro 提供了一个可拔插的认证机制。
4、 如果在应用程序中配置了多个Realm , ModularRealmAuthenticator会根据配置的AuthenticationStrategy ( 认证策略)来进行多 Realm 的认证过程。
在 Realm 被调用后, AuthenticationStrategy将对每一个Realm 的结果作出响应。
注:如果应用程序中仅配置了一个Realm , Realm 将被直接调用而无需再配置认证策略。
5、 判断每一个 Realm 是否支持提交的token ,如果支持,Realm 将调用getAuthe nticatio nln fo (toke n ); getAuthe nticatio nlnfo 方法就是实际认证处理,我们通过覆盖 Realm 的doGetAuthenticationlnfo方法来编写我们自定义的认证处理。
四、使用多个Realm 的处理机制:©ISubject loginftok&n}2Security Managerulheriticalioni\Strategy JAuthenticatorCuStOUbRealmLDAPRuaLmJDBC 5 ) RealmPluggable Realms (1 or more) Aetiv&Difedjciry Realm1、Authenticator默认实现是ModularRealmAuthenticator, 它既支持单一Realm也支持多个Realm。