Shiro-用户手册
shiro入门教程
一、介绍:
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.AnonymousFilter
authc org.apache.shiro.web.filter.authc.FormAuthenticatio nFilter
shiro启用注解方式
shiro启⽤注解⽅式
shiro验证权限⽅式⼀种是基于url配置⽂件:
例如:
<bean id="shiroFilter"class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager"ref="securityManager"/>
<!-- 登录页⾯,⽤户登录不成功⾃动返回该页⾯ -->
<property name="loginUrl" value="/login"/>
<!-- 登录成功页⾯,登录成功后跳转到该页⾯ -->
<property name="successUrl" value="/index"/>
<!-- ⽆权访问跳转页⾯ -->
<property name="unauthorizedUrl" value="permNo"/>
<!-- ⾃定义权限页⾯设置url的访问权限。anon表⽰不⽤验证,
都可以访问。anthc:authc filter 监听,不登陆不能访问。logout:logout filter监听。
没有列出的常⽤配置:perms["remote:invoke"] :需要⾓⾊romote 和权限invoke才能访问。roles["admin"]需要⾓⾊admin才能访问。设置可⽤“,”隔开,如:/admin/test = authc,roles[admin] -->
Shiro学习文档
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”:记住用户身份,提供类似购物车功能。
shrio的使用流程
Shiro的使用流程
一、什么是Shiro
Shiro是一个功能强大且灵活的Java安全框架,用于身份验证、授权、加密和会话管理等安全操作。它提供了一个简单易用的API,可以轻松地集成到Java应用程序中。
二、Shiro的使用流程
1.引入Shiro依赖:首先需要在项目的构建文件中添加Shiro的相关依
赖。可以通过Maven或Gradle等构建工具来管理依赖。
2.配置Shiro:在项目的配置文件中配置Shiro的相关信息,包括身份
认证、授权、加密算法等。可以使用XML或者Java代码的方式进行配置。
3.编写自定义Realm类:Realm是Shiro进行身份验证和授权的关键
组件。需要编写一个自定义的Realm类,实现其中的身份验证和授权方法,以满足项目的需求。
4.集成Shiro到项目:将Shiro集成到项目中,可以通过在Web容器
中配置Shiro的Filter来拦截请求,并进行身份验证和授权操作。
5.实现身份认证:在登录功能中,根据用户输入的用户名和密码,调
用Shiro的API进行身份认证。Shiro会根据配置的Realm类来验证用户的身份。
6.进行权限控制:在需要进行权限控制的地方,调用Shiro的API来判
断用户是否拥有相应的权限。可以通过注解或者编程的方式来进行权限控制。
7.加密和解密:如果需要对用户密码进行加密存储,可以使用Shiro提
供的加密算法来实现。同时,还可以使用Shiro提供的API来对加密后的密码进行验证和解密。
8.会话管理:Shiro提供了会话管理的功能,可以管理用户的登录状态
shiro使用详解
shiro使用详解
Shiro 是一个用 Java 编写的开源安全框架,用于身份验证、授
权和会话管理等功能。它提供了一套易用的 API,可以轻松地
集成到现有的应用程序中。
Shiro 的核心概念包括主体(Subject)、身份验证(Authentication)、授权(Authorization)和会话管理(Session Management)等。
1. 主体(Subject):Shiro 中的主体表示当前的用户或系统,
可以是一个人、一个设备或一组人。主体可以执行身份验证、授权和会话管理等操作。
2. 身份验证(Authentication):Shiro 提供了多种身份验证方式,包括用户名/密码验证、基于证书的身份验证和单点登录等。开发者可以根据具体需求选择适合的身份验证方式。
3. 授权(Authorization):Shiro 支持基于角色和权限的授权机制。开发者可以定义角色和权限,并将其分配给用户或用户组。Shiro 会根据用户的角色和权限决定用户是否可以执行某个操作。
4. 会话管理(Session Management):Shiro 提供了会话管理的功能,可以轻松处理用户的会话状态和会话数据。Shiro 支持
基于 Cookie 的会话管理和集群环境下的分布式会话管理。
使用 Shiro 进行身份验证和授权的基本流程如下:
1. 定义用户和角色:开发者可以在配置文件中定义用户和角色,也可以通过编程的方式进行定义。
2. 配置安全策略:开发者可以配置 Shiro 的安全策略,包括密
码加密算法、身份验证器和授权器等。
shiro 登录原理-定义说明解析
shiro 登录原理-概述说明以及解释
1.引言
1.1 概述
Shiro是一个强大而灵活的Java安全框架,用于处理身份认证、授权、密码加密等安全相关的任务。它提供了一个简单而直观的编程界面,使开发人员能够轻松地集成安全性到他们的应用程序中。
在当今互联网的时代,随着用户数量和敏感信息的增加,保护用户信息和确保系统的安全性变得尤为重要。实施有效的身份验证和授权机制是确保系统安全的关键环节之一。Shiro框架作为一种解决方案,致力于为Java应用程序提供可靠的安全性支持。
Shiro的设计理念是简单易用,同时又具备高度的灵活性和可扩展性。无论是基本的用户名/密码认证,还是复杂的多因素认证,Shiro都能满足各种安全需求。它支持多种认证机制,如表单登录、基本认证、证书认证等,同时还可以集成第三方身份提供者,如LDAP、Active Directory等。在完成身份认证之后,Shiro还提供了授权机制,可以根据不同用户的权限对资源进行访问控制。
本文将重点介绍Shiro的登录认证过程和相关原理。首先,我们会对
Shiro框架本身进行简要的介绍,了解其主要特点和功能。接着,我们将详细解析Shiro的登录认证流程,包括用户身份验证和授权过程。最后,我们将总结Shiro登录原理的重要性,并展望其在应用和发展方面的前景。
通过本文的阅读,读者将会了解到Shiro框架在身份认证和授权方面的核心机制,以及如何在实际项目中应用Shiro来保护系统的安全性。同时,读者也能够对Shiro的未来发展进行展望,进一步认识到其在安全领域中的重要性和潜力。
Apache_Shiro参考手册中文版-converted
Apache Shiro Reference Documentation
Apache 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 的重点,并且这个参考手册也会与之类似的被组织起来:
Shiro开发配置说明
Shiro1.1.0开发配置文档
建立一个java应用程序项目,项目及文件结构如图:
注意以下几点:
1、导入与Shiro相关的库,如图所示几个jar包,如运行时出现log4j相关的错误,则可能是log4j相关的包不正确;
2、shiro.ini文件的路径问题,应放在项目根路径下,内容为:
view plain
1.[users]
2.zwx=zavens
3、log4j.properties文件为可选文件,建议自己设置log4j属性,内容为:
view plain
1.log4j.rootLogger=TRACE, stdout
2.
3.log4j.appender.stdout=org.apache.log4j.DailyRollingFileAppender
4.log4j.appender.stdout.File=C:/log4j/log.txt
5.log4j.appender.stdout.Encoding=GBK
6.log4j.appender.stdout.Threshold=DEBUG
7.log4j.appender.stdout.DatePattern='.'yyyy-MM-dd
yout=org.apache.log4j.PatternLayout
yout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L : %
m%n
10.
.sf.ehcache=WARN
.apache=WARN
.quartz=WARN
.apache.shiro=TRACE
.apache.shiro.util.ThreadContext=INFO
shiro的使用的步骤
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.MyRealm
securityManager.realms = myRealm
[users]
username=password
- 编程方式:可以通过编写Java代码来配置Shiro的组件。例如,以编程方式配置安全管理器:
shiro的常用注解
shiro的常用注解
一、引言
Shiro是一个广泛使用的安全框架,它提供了强大的身份认证、授权和会话管理功能。在Shiro中,注解是一种常用的机制,用于配置和定制应用程序的安全行为。本文档将介绍Shiro中常用的注解,帮助读者更好地理解和使用Shiro框架。
二、常用注解介绍
1. `@RequiresAuthentication`:该注解用于指示该方法必须通过身份认证才能执行。在方法上添加此注解后,只有已通过身份认证的用户才能调用该方法。
2. `@RequiresGuest`:该注解用于指示该方法只允许未通过身份认证的用户执行。在方法上添加此注解后,只有未通过身份认证的用户才能调用该方法。
3. `@SkipPermission`:该注解用于指示该方法无需进行权限检查。在方法上添加此注解后,该方法将绕过权限检查,无论用户是否有执行该方法的权限。
4. `@Authenticated`:该注解用于指示另一个方法或类必须在身份认证完成后才能执行。在需要等待身份认证的方法上添加此注解,可以确保只有经过身份认证的用户才能进入相关逻辑。
5. `@SessionValidation`:该注解用于指定一个方法,当会话创建时会自动调用该方法进行验证。可以在方法上添加此注解,并在其中编写必要的验证逻辑。
6. `@Access`:该注解用于控制对资源的访问,支持多种控制方式,如需要验证用户角色、时间限制等。通过设置不同的属性,可以实现不同的访问控制逻辑。
7. `@AuthenticatedUser`:该注解用于指定已通过身份认证的用户作为方法的参数或返回值。可以在方法参数上添加此注解,以便在方法执行时自动将已认证的用户传递给方法。
shiro的详细讲解
shiro的详细讲解
1 权限管理1.1 什么是权限管理
基本上涉及到⽤户参与的系统都要进⾏权限管理,权限管理属于系统安全的范畴,权限管理实现对⽤户访问系统的控制,按照安全规则或者安全策略控制⽤户可以访问⽽且只能访问⾃⼰被授权的资源。
权限管理包括⽤户⾝份认证和授权两部分,简称认证授权。对于需要访问控制的资源⽤户⾸先经过⾝份认证,认证通过后⽤户具有该资源的访问权限⽅可访问。
1.2 ⽤户⾝份认证1.
2.1 概念
⾝份认证,就是判断⼀个⽤户是否为合法⽤户的处理过程。最常⽤的简单⾝份认证⽅式是系统通过核对⽤户输⼊的⽤户名和⼝令,看其是否与系统中存储的该⽤户的⽤户名和⼝令⼀致,来判断⽤户⾝份是否正确。对于采⽤指纹等系统,则出⽰指纹;对于硬件Key等刷卡系统,则需要刷卡。
1.2.2 ⽤户名密码⾝份认证流程
1.2.3 关键对象
上边的流程图中需要理解以下关键对象:
Subject:主体
访问系统的⽤户,主体可以是⽤户、程序等,进⾏认证的都称为主体;
Principal:⾝份信息
是主体(subject)进⾏⾝份认证的标识,标识必须具有唯⼀性,如⽤户名、⼿机号、邮箱地址等,⼀个主体可以有多个⾝份,但是必须有⼀个主⾝份(Primary Principal)。
credential:凭证信息
是只有主体⾃⼰知道的安全信息,如密码、证书等。
1.3 授权1.3.1 概念
授权,即访问控制,控制谁能访问哪些资源。主体进⾏⾝份认证后需要分配权限⽅可访问系统的资源,对于某些资源没有权限是⽆法访问的。
1.3.2 授权流程
下图中橙⾊为授权流程。
mockmvc shiro requirerole 注解
mockmvc shiro requirerole 注解
1. 介绍
在开发Web应用程序时,经常需要进行单元测试以确保代码的正确性和可靠性。MockMvc是Spring MVC提供的一种用于测试控制器的工具,可以在不启动整个应用程序的情况下模拟HTTP请求和响应。而Shiro是一个功能强大的Java身份验证和授权框架,可以用于保护Web应用程序中的资源。Shiro提供了一系列的注解来控制访问权限,其中@RequiresRoles注解用于要求用户具有特定的角色才能访问某个接口或方法。
本文将探讨如何使用MockMvc和Shiro的@RequiresRoles注解来进行控制器方法的单元测试,并介绍其使用的步骤和注意事项。
2. 准备工作
在开始之前,我们需要进行一些准备工作。
2.1. 依赖
首先,我们需要在我们的项目中添加MockMvc和Shiro的依赖。假设我们使用Maven构建项目,在pom.xml文件中添加以下依赖:
<!-- 测试依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Shiro依赖 -->
<dependency>
shiro的使用流程
shiro的使用流程
1. 简介
Shiro是一个强大且易于使用的Java安全框架,可以对应用程序进行身份验证、授权、加密等操作。本文将介绍使用Shiro的流程。
2. 导入Shiro依赖
在开始使用Shiro之前,首先需要导入Shiro的相关依赖。可以通过在项目的
构建文件中添加以下依赖来引入Shiro:
dependencies { implementation ‘org.apache.shiro:shiro-core:1.7.1’ … } ```
3. 配置Shiro
配置Shiro是使用Shiro的第一步。下面是配置Shiro的步骤:
3.1 创建Shiro配置文件
在项目中创建一个名为shiro.ini的文件,并保存在项目的资源目录中。
3.2 配置身份验证器
在shiro.ini文件中,配置Shiro的身份验证器。可以选择使用Shiro自带的
身份验证器,也可以自定义身份验证器。
3.2.1 使用自带的身份验证器
可以通过在shiro.ini文件中添加以下配置来使用Shiro自带的身份验证器:[main] authc.loginUrl = /login.html authc.successUrl = /index.html
authc.failureKeyAttribute = shiroLoginFailure ernameParam = username authc.passwordParam = password ```
3.2.2 自定义身份验证器
如果想自定义身份验证器,在项目中创建一个继承Authenticator的类,并实
shiro认证流程
shiro认证流程
Shiro认证流程。
Shiro是一个功能强大且易于使用的Java安全框架,它提供了
对身份验证、授权、加密和会话管理等安全领域的全面支持。在使
用Shiro进行开发时,了解Shiro认证流程是非常重要的,本文将
详细介绍Shiro认证流程的相关内容。
1. Subject登录。
在Shiro中,Subject是指正在与软件交互的当前用户。当用
户进行登录操作时,Shiro会创建一个Subject对象,并将用户的
身份信息和凭证传递给Shiro进行认证。在Subject登录的过程中,Shiro会首先验证用户的身份信息,然后再验证用户的凭证信息。
2. 身份验证。
身份验证是Shiro认证流程的第一步,它主要用于验证用户的
身份信息。在身份验证过程中,Shiro会根据用户提供的身份信息,比如用户名或者邮箱等,来查找用户的相关信息并进行匹配验证。
如果用户提供的身份信息是有效的,那么身份验证就会通过,否则
将会失败。
3. 凭证验证。
凭证验证是Shiro认证流程的第二步,它主要用于验证用户的
凭证信息,比如密码等。在凭证验证过程中,Shiro会根据用户提
供的凭证信息,比如密码,来与用户存储的凭证信息进行匹配验证。如果用户提供的凭证信息是有效的,那么凭证验证就会通过,否则
将会失败。
4. 认证通过。
当用户的身份信息和凭证信息都通过验证后,Shiro认证流程
就会顺利通过,并且用户将被标记为已认证。此时用户可以正常访
问系统中受限资源,进行相关操作。
5. 认证失败。
如果用户的身份信息或者凭证信息未通过验证,Shiro认证流
shiro工作流程
shiro工作流程
shiro是一个功能强大的Java安全框架,用于身份验证、授权
和加密。它提供了一套完整的安全解决方案,可以轻松集成到任何Java应用程序中。下面将介绍shiro的工作流程,帮助大家更好地
理解和使用这个框架。
首先,shiro的工作流程可以分为三个主要步骤,身份验证、
授权和加密。在实际应用中,这三个步骤通常是连续的,用户需要
先进行身份验证,然后根据身份进行授权,最后对敏感数据进行加
密保护。
身份验证是shiro的第一步,它用于确认用户的身份信息。在
身份验证过程中,shiro会根据用户提供的用户名和密码进行验证,确认用户是否是合法用户。身份验证成功后,用户将被授予相应的
权限进行后续操作。
接下来是授权步骤,shiro会根据用户的身份信息进行权限控制。在这一步骤中,shiro会根据用户的角色和权限信息,判断用
户是否有权限进行特定操作。如果用户拥有相应的权限,将被允许
执行相应的操作,否则将被拒绝。
最后是加密步骤,shiro提供了一套完善的加密解决方案,用于保护敏感数据的安全性。在实际应用中,我们可以使用shiro提供的加密算法对用户的密码和其他敏感数据进行加密,确保数据在传输和存储过程中不会被窃取或篡改。
总的来说,shiro的工作流程是非常清晰和简单的。通过身份验证、授权和加密这三个步骤,shiro可以为Java应用程序提供全面的安全保护。无论是Web应用、移动应用还是桌面应用,都可以通过集成shiro来实现安全可靠的用户身份验证和授权管理。
除了上述的基本工作流程,shiro还提供了丰富的扩展功能,可以根据实际需求进行定制和扩展。例如,可以通过自定义Realm 来实现不同的身份验证和授权逻辑,还可以通过自定义Filter来实现特定的安全控制逻辑。这些扩展功能使得shiro可以适应各种复杂的应用场景,为开发人员提供了更大的灵活性和便利性。
Shiro的基本使用
Shiro的基本使⽤⽬录
⾸发⽇期:2019-06-03
在以往的权限管理中,我们的权限管理通常是有以下⼏个步骤:
1.创建⽤户,分配权限。
2.⽤户登录,权限拦截器拦截请求,识别当前⽤户登录信息
3.从权限表中判断是否拥有权限
从以上步骤中可以提取到以下三个问题。
三个问题:
1.如何让Shiro拦截请求。
在web开发中,Shiro会提供⼀个拦截器来对请求进⾏拦截。
2.Shiro如何判断发起请求⽤户的⾝份?
在web开发中,会借助session来判断,如果禁⽤了session,那么可能需要重写⼀些⽅法。
3.如何判断权限?
Shiro使⽤realm来判断权限。
下⾯的也将以这三个问题为中⼼来描述Shiro。
Shiro是⼀个开源的java安全(权限)框架,它能够实现⾝份验证、授权、加密和会话管理等功能。
Shiro是apache旗下的产品,它的官⽹是:
Shiro不仅可以⽤于javaEE环境,也可以⽤于javaSE
Shiro功能
Authentication:⾝份认证,验证⽤户是否拥有某个⾝份。
Authorization: 权限校验,验证某个已认证的⽤户是否拥有某个权限。确定“谁”可以访问“什么”。
Session Management:会话管理,管理⽤户登录后的会话,
Cryptography:加密,使⽤密码学加密数据,如加密密码。
Web Support:Web⽀持,能够⽐较轻易地整合到Web环境中。
Caching:缓存,对⽤户的数据进⾏缓存,
Concurrency:并发,Apache Shiro⽀持具有并发功能的多线程应⽤程序,也就是说⽀持在多线程应⽤中并发验证。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Shiro用户手册
Shiro架构介绍
一、什么是Shiro
Apache 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*Process
VM / Network Bounds
Security Manager
Authenticator
Authorizer
g
RDBMS LDAP
PrDpri&tai^
Standalone Application
Acbve
Directory
Authentication^ _ Sti^Legy
J
Session Manager
Rflx SikBrlight Swing (^Subjed)
C/C++ C# .NE T
Memory, RDBMS, p 旳 Tata 已 etc.
Cache Manager
Session
DAO
{cache)
Pluggable Realms (1 or more) JDflC Rea m
LDAP
Realm @auh j
CuytOTT i Raa )m
Shiro认证
认证就是验证用户身份的过程。在认证过程中,用户需要提交实体信息(Principals)和凭据信息(Credentials)以检验用户是否合法。最常见的实体/凭证”组合便是用户名/密码”组合。
亠、Shiro认证过程
1、收集实体/凭据信息
Java代码曲
1. //Example using most common scenario of username/password pair:
2. UsernamePasswordToken token = new UsernamePasswordToken(username, passwor
d);
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方法提交认证。