最新shiro-安全框架

合集下载

shiro反序列化漏洞原理(一)

shiro反序列化漏洞原理(一)

shiro反序列化漏洞原理(一)Shiro反序列化漏洞什么是Shiro反序列化漏洞?Shiro是一款Java安全框架,被广泛应用于开发企业级应用程序。

然而,Shiro框架存在一个被称为”Shiro反序列化漏洞”的安全问题。

原理解释1. 什么是序列化和反序列化?在Java中,对象的序列化是指将对象转换为字节流的过程,以便存储或传输该对象。

反序列化则是将字节流转换回对象的过程。

这一过程通常涉及将对象的状态信息写入字节流,以及根据字节流的内容重新构建对象。

2. Shiro框架的对象反序列化漏洞Shiro框架在进行身份认证时,使用了Java的序列化和反序列化机制。

然而,Shiro对于反序列化对象的有效性没有进行足够的验证,导致攻击者可以构造恶意的序列化数据,从而执行任意代码。

攻击者可以通过将恶意的序列化数据提交给Shiro身份认证机制,触发Shiro反序列化漏洞。

一旦攻击成功,攻击者可以在目标服务器上执行恶意代码,进而危害整个应用程序的安全。

漏洞修复与防范措施为了防止遭受Shiro反序列化漏洞的攻击,以下是一些修复和防范措施:1.升级到最新版本的Shiro框架:开发者应及时查看Shiro的官方网站,了解并下载最新版本的Shiro框架。

新版本通常会修复已知的漏洞和安全问题。

2.禁止接受未知的序列化数据:在Shiro的配置中,应禁止接受未知或不受信任的序列化数据。

可以通过配置Shiro的RememberMe功能来限制接受的序列化数据的类型。

3.限制可信任的序列化配置:可以通过在Shiro配置文件中指定可信任的序列化类,来限制序列化和反序列化操作。

只有在白名单中的类才能被反序列化。

4.使用安全的序列化方式:开发者应优先选择安全的序列化方式,如JSON序列化,而不是Java默认的对象序列化。

JSON序列化通常要求开发人员显式地定义序列化和反序列化的过程,从而提高安全性。

5.加强网络安全措施:在服务器层面,加强网络安全措施也是防范Shiro反序列化漏洞的重要措施。

shiro框架工作流程

shiro框架工作流程

shiro框架工作流程
Shiro框架是一个功能强大的Java安全框架,用于身份验证、授权、加密和会话管理。

它提供了一个简单易用的API,可以帮助开发人员快速地集成安全功能到他们的应用程序中。

下面我们将介绍一下Shiro框架的工作流程。

1. 身份验证(Authentication),Shiro框架首先会对用户进行身份验证,确保用户是合法的。

在身份验证过程中,Shiro框架会检查用户提供的凭证(如用户名和密码)是否与系统中存储的凭证匹配。

如果匹配成功,用户将被授权继续访问系统;否则,将被拒绝访问。

2. 授权(Authorization),一旦用户通过身份验证,Shiro 框架会进行授权,确定用户是否有权限执行特定的操作。

授权过程中,Shiro框架会检查用户所属的角色和权限,并根据这些信息来决定用户是否有权执行所请求的操作。

3. 加密(Cryptography),Shiro框架还提供了加密功能,可以帮助开发人员对敏感数据进行加密处理,确保数据的安全性。

4. 会话管理(Session Management),Shiro框架还包括会话
管理功能,可以帮助开发人员管理用户的会话状态,确保用户在系
统中的操作是安全和可控的。

总的来说,Shiro框架的工作流程包括身份验证、授权、加密
和会话管理等功能,为应用程序提供了全面的安全保障。

通过集成Shiro框架,开发人员可以快速地为他们的应用程序添加安全功能,保护用户数据和系统资源的安全。

shiro securityutils 解析

shiro securityutils 解析

shiro securityutils解析Shiro(Apache Shiro)是一个用于身份验证、授权和加密的开源Java安全框架。

`SecurityUtils`是Shiro框架中的一个工具类,提供了一些便捷的方法来访问和操作Shiro 的安全功能。

以下是对`SecurityUtils`的一些主要功能和用法的解析:1.获取Subject对象:```javaSubject currentUser=SecurityUtils.getSubject();```可以使用`getSubject()`方法获取当前应用程序的Subject对象,Subject代表了当前用户。

通过Subject对象,可以进行身份验证、授权和其他安全操作。

2.身份验证:```javaif(!currentUser.isAuthenticated()){UsernamePasswordToken token=new UsernamePasswordToken("username", "password");token.setRememberMe(true);try{currentUser.login(token);}catch(AuthenticationException e){//身份验证失败}}```使用`login`方法进行身份验证。

在这个例子中,使用了`UsernamePasswordToken`来封装用户名和密码,然后通过`login`方法进行验证。

3.授权检查:```javaif(currentUser.hasRole("admin")){//执行某些操作,具有"admin"角色}```使用`hasRole`方法检查用户是否具有指定的角色。

4.权限检查:```javaif(currentUser.isPermitted("user:read")){//执行某些操作,具有"user:read"权限}```使用`isPermitted`方法检查用户是否具有指定的权限。

shiro框架原理

shiro框架原理

shiro框架原理Shiro框架原理。

Shiro是一个功能强大且易于使用的Java安全框架,它提供了身份验证、授权、加密和会话管理等安全功能,可以轻松地集成到任何Java应用程序中。

Shiro框架的原理主要围绕着Subject、SecurityManager、Realm和Session等核心概念展开,下面我们将逐一介绍这些内容。

首先,Subject是Shiro框架中的核心概念之一,它代表了当前用户的安全操作。

Subject可以是一个用户、设备或者其他与应用程序交互的实体,它封装了用户的安全操作,包括身份验证和授权等。

在Shiro框架中,Subject是通过SecurityManager进行管理和操作的。

其次,SecurityManager是Shiro框架的安全管理器,它充当了Subject与应用程序之间的桥梁,负责管理所有的安全操作。

SecurityManager是Shiro框架的核心组件,它协调着所有的安全操作,包括身份验证、授权、加密和会话管理等。

在Shiro框架中,SecurityManager是通过Realm进行身份验证和授权的。

然后,Realm是Shiro框架中用于身份验证和授权的组件,它充当了安全数据源的角色,负责从数据源中获取用户的安全信息。

在Shiro框架中,Realm可以是从数据库、LDAP、文件系统或者其他数据源中获取用户的安全信息,然后进行身份验证和授权操作。

Realm是Shiro框架的核心组件之一,它与SecurityManager协同工作,确保用户的安全操作得到正确的处理。

最后,Session是Shiro框架中用于管理用户会话的组件,它负责管理用户的会话状态,包括创建、销毁、过期和存储用户的会话数据等。

在Shiro框架中,Session可以是基于Web的会话,也可以是基于非Web的会话,它提供了灵活的会话管理功能,可以轻松地集成到任何Java应用程序中。

总结一下,Shiro框架的原理主要围绕着Subject、SecurityManager、Realm和Session等核心概念展开,它提供了强大且灵活的安全功能,可以轻松地集成到任何Java应用程序中。

shiro 安全框架-最好的中文配置文档

shiro 安全框架-最好的中文配置文档
<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>
启用 Shiro 注解
在独立应用程序和 Web 应用程序中,你可能想为安全检查使用 Shiro 的注释(例如, @RequiresRoles,@RequiresPermissions 等等)。这需要 Shiro 的 Spring AOP 集成来 扫描合适的注解类以及执行必要的安全逻辑。以下是如何使用这些注解的。只需添加这两个 bean 定义到 applicationContext-shiro.xml 中:
<filter-name>shiroSecurityFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> <init-param> <param-name>targetFilterLifecycle</param-name> <param-value>true</param-value>
<bean id="shiroSecurityFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<!-- shiro 的核心安全接口 --> <property name="securityManager" ref="securityManager" /> <!-- 要求登录时的链接 --> <property name="loginUrl" value="/login.jsp" /> <!-- 登陆成功后要跳转的连接 --> <property name="successUrl" value="/index.jsp" /> <!-- 未授权时要跳转的连接 --> <property name="unauthorizedUrl" value="/unauthorized.jsp" /> <!-- shiro 连接约束配置 --> <propery name="filterChainDefinitions">

shiro框架泄露解决方法

shiro框架泄露解决方法

shiro框架泄露解决方法1.引言1.1 概述概述部分的内容可以包括以下信息:Shiro框架是一个功能强大且广泛使用的Java安全框架,它提供了身份验证、授权、加密、会话管理等安全功能,被广泛应用于Web应用程序和企业级应用系统中。

然而,随着Shiro框架的使用越来越广泛,一些安全问题也随之而来。

其中之一就是Shiro框架泄露的问题。

当Shiro框架的配置不当或在代码中存在安全漏洞时,攻击者可能会通过各种方式获取到Shiro框架的敏感信息,如秘钥、加密算法等,从而对系统进行恶意攻击。

本文的主要目的是介绍Shiro框架泄露问题的解决方法。

文章将从两个方面展开讨论,分别是解决方法1和解决方法2。

在解决方法1中,我们将介绍如何正确配置Shiro框架以避免泄露敏感信息。

这包括对Shiro的加密算法、密码散列函数、会话管理等进行合理的设置和使用。

同时,我们还会分享一些在代码编写阶段应注意的安全最佳实践,以减少潜在的漏洞。

在解决方法2中,我们将介绍一些额外的安全措施,如使用安全的会话管理策略、限制系统对外部资源的访问权限等。

这些措施可以进一步增强系统的安全性,防止黑客利用Shiro框架泄露进行攻击。

通过本文的阅读,读者将能够了解到Shiro框架泄露问题的具体表现、潜在的风险以及相应的解决方法。

我们希望本文能够对读者在使用Shiro框架时保障系统安全起到一定的指导作用,并为未来解决类似安全问题提供一些启示。

1.2 文章结构本文将从引言、正文和结论三个部分来展开讨论shiro框架泄露的解决方法。

在引言部分,我们将对问题进行概述,说明shiro框架泄露所带来的风险和影响。

同时,我们还会介绍文章的结构和目的,以便读者能够更好地理解文章的内容和组织。

在正文部分,我们将详细探讨shiro框架泄露的问题,包括其原因、可能导致的后果以及对系统安全的影响。

接着,我们将提出两种解决方法来应对shiro框架泄露的情况,分别进行详细的介绍和讨论。

Shiro安全登录框架学习

判断用户是否拥有角色admin. 判断用户是否拥有访问的权限
Shiro的4大部分——身份验证,授权,会话管理 和加密
• Authentication:身份验证,简称登录.
• Authorization:授权,给用户分配角色或 者权限资源
除了以上功能,shiro还提供很多扩展
• Web Support:主要针对web应用提供一 些常用功能.
小结:
1.Subjectorg.apache.shiro.subject.Subject: 简称用户
2.SecurityManagerorg.apache.shiro.mgt.SecurityManager 如上所述,SecurityManager是shiro的核心,协调shiro的各个组

3.Authenticatororg.apache.shiro.authc.Authenticator: 登录控制 注:Authentication Strategy org.apache.shiro.authc.pam.AuthenticationStrategy 如果存在多个realm,则接口AuthenticationStrategy会确定什么 样算是登录成功例如,如果一个Realm成功,而其他的均失败,是 否登录成功 .
4.Authorizerorg.apache.shiro.authz.Authorizer : 决定subject能拥有什么样角色或者权限.
5.SessionManagerorg.apache.shiro.session.SessionManager : 创建和管理用户session.通过设置这个管理器,shiro可以在任 何环境下使用session.
rest:例子/admins/user/=restuser,根据请求的方法,相当于 /admins/user/=permsuser:method ,其中method为 post,get,delete等.

Shiro安全登录框架学习

通过配置URL安全策略,可以指定哪些URL需要身份验证或授权。
配置表单登录
配置表单登录,用于用户登录和注销。
配置主题
通过配置主题,可以定制登录页面和登录成功后的页面样式。
Shiro的插件扩展
01
插件概述
Shiro提供了许多插件,用于扩展其 功能。
插件配置
根据插件的文档进行配置,以启用 相应的功能。
集成方便
Shiro与各种框架和库集成良好,如Spring、 Hibernate等。
功能全面
Shiro不仅提供了身份验证和授权功能,还 涵盖了加密、会话管理等领域。
02
Shiro的核心概念
认证
认证是用户身份验证的过程,用于确认用户是否是系统所期望的实体。Shiro提供了强大的认证机制,支持基于用户名/密码 、令牌、Kerberos、LDAP、JDBC等多种方式的认证。
03
02
插件安装
根据需要选择相应的插件进行安装。
插件使用
使用插件提供的功能,以满足特定 的安全需求。
04
06
Shiro的案例与实战
简单的登录案例
用户注册
创建一个用户,并为其分 配一个用户名和密码。
权限分配
根据用户角色分配相应的 权限。
用户登录
用户输入用户名和密码进 行登录,Shiro验证用户 名和密码是否匹配。
02
它是一个轻量级的、可扩展的 框架,适用于各种类型的应用 程序,包括Web应用程序、移 动应用程序和独立应用程序。
03
Shiro简化了安全性的实现,提 供了清晰、一致的API,使开发 者能够专注于业务逻辑而不是安 全细节。
Shiro的用途
身份验证
验证用户身份,确认用户是否 是系统所期望的实体。

shiro框架教程

shiro框架教程Shiro是一个强大的Java安全框架,可以帮助开发者快速实现身份验证、授权、加密和会话管理等安全功能。

本教程将介绍Shiro框架的基本概念和用法,帮助读者快速上手使用Shiro的各种功能。

一、概述1.1 什么是ShiroApache Shiro是一个Java安全框架,提供了身份验证、授权、加密和会话管理等常用的安全功能,使开发者能够轻松地为自己的应用程序添加安全性。

1.2 Shiro的特点Shiro的特点包括灵活性、简单性、可扩展性和强大的功能。

它提供了易于使用的API和丰富的功能,适用于各种各样的应用程序,从简单的命令行工具到大型企业应用程序。

二、安装和配置2.1 下载和导入Shiro首先,需要从Shiro的官方网站下载Shiro的jar包,并将其导入到项目的classpath中。

目前最新版本为1.7.1,可以从Apache Shiro的官方网站下载。

2.2 Shiro配置文件Shiro的配置文件一般是一个名为shiro.ini的文件,可以通过在classpath根目录下创建该文件来进行配置。

配置文件用于设置Shiro的各种组件和参数。

三、认证3.1 认证流程Shiro的认证流程包括以下几个步骤:- 构建SecurityManager对象:SecurityManager是Shiro的核心组件,它负责处理所有的认证和授权请求。

- 构建Subject对象:Subject代表当前用户,可以通过Subject 对象进行身份验证和授权操作。

- 构建AuthenticationToken对象:AuthenticationToken是用户提交的身份验证信息,可以是用户名/密码、token等。

- 调用Subject的login方法进行身份验证:Subject对象的login方法将AuthenticationToken传递给SecurityManager进行认证。

3.2 基于用户名/密码的认证Shiro提供了简单的基于用户名/密码的认证机制,可以通过用户名和密码来验证用户的身份。

shiro 安全框架-最好的中文配置文档

现在有一张表的描述实体类,以及数据访问:
@Entity @Table(name="TB_RESOURCE") public class Resource implements Serializable {
//主键 id @Id private String id; //action url private String value; //shiro permission; private String permission; //------------------Getter/Setter---------------------// }
apache shiro 与 spring 整合、动态 filterChainDefinitions、以及认证、授

apache shiro 是一个安全认证框架,和 spring security 相比,在于他使用了比较简洁易懂的 认证和授权方式。其提供的 native-session(即把用户认证后的授权信息保存在其自身提供 Session 中)机制,这样就可以和 HttpSession、EJB Session Bean 的基于容器的 Session 脱耦,到和客户端应用、Flex 应用、远程方法调用等都可以使用它来配置权限认证。 在 exit-web-framework 里的 vcs-admin 例子用到该框架,具体使用说明可以参考官方帮助文档。 在这里主要讲解如何与 spring 结合、动态创建 filterchaindefinitions、以及认证、授权、和 缓存处理。
<!-- Spring ApplicationContext 配置文件的路径,可使用通配符,多个路径用,号分隔 此参数用于后 面的 Spring Context Loader --> <context-param>
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

s h i r o-安全框架Shiro 是 JAVA 世界中新近出现的权限框架,较之 JAAS 和 Spring Security,Shiro 在保持强大功能的同时,还在简单性和灵活性方面拥有巨大优势。

本文就带领读者一睹 Shiro 的风采。

可能大家早先会见过 J-security,这个是 Shiro 的前身。

在 2009 年 3 月初之前,这个安全框架叫做 J-security,由于某些原因,更名为 Shiro(或者Ki,意为 Fortress),是 Apache 的孵化项目,鉴于本文编写时 Shiro 的还没有正式发布的版本,本文使用的是 Jsecurity 的稳定版本 0.9,本文中Shiro 等同于 Jsecurity。

本文将涉及 Shiro 的整体框架、安全模型、关键概念类,同时给出了 Shiro 以及 Grails Shiro Plugin 的使用示例,可以下载文中使用的源代码。

本文代码的开发环境:•Jsecurity 0.9•Grails 1.2.0•Grails Shiro Plugin 1.0.1•SpringSource Tool Suite 2.3Shiro 是一个强大而灵活的开源安全框架,能够非常清晰的处理认证、授权、管理会话以及密码加密。

如下是它所具有的特点:1.易于理解的 Java Security API;2.简单的身份认证(登录),支持多种数据源(LDAP,JDBC,Kerberos,ActiveDirectory 等);3.对角色的简单的签权(访问控制),支持细粒度的签权;4.支持一级缓存,以提升应用程序的性能;5.内置的基于 POJO 企业会话管理,适用于 Web 以及非 Web 的环境;6.异构客户端会话访问;7.非常简单的加密 API;8.不跟任何的框架或者容器捆绑,可以独立运行。

目前还有其他出现较早的安全框架,比如 JAAS,Spring Security。

JAAS —面世的时间最早,但是鉴于其在使用上有很大的限制,很少有人真正的使用它。

可以说它不是一个好的应用程序级别的安全框架;Spring Security —目前是 Java 安全框架领域当之无愧的老大,已经非常成熟了;如果使用 Spring 框架,可以首选 Spring Security,但是对于单应用来说,Shiro 更显简单方便。

下面就开始我们的 Shiro 之旅吧!首先,我们来看看的 Shiro 的整体架构,见下图:图 1. 整体架构从上图可以看出,Shiro 主要有四个组件:1.SecurityManager典型的 Facade,Shiro 通过它对外提供安全管理的各种服务。

2.Authenticator对“Who are you ?”进行核实。

通常涉及用户名和密码。

这个组件负责收集 principals 和 credentials,并将它们提交给应用系统。

如果提交的 credentials 跟应用系统中提供的 credentials 吻合,就能够继续访问,否则需要重新提交 principals 和credentials,或者直接终止访问。

3.Authorizer身份份验证通过后,由这个组件对登录人员进行访问控制的筛查,比如“who can do what”,或者“who can do which actions”。

Shiro采用“基于Realm”的方法,即用户(又称 Subject)、用户组、角色和 permission 的聚合体。

4.Session Manager这个组件保证了异构客户端的访问,配置简单。

它是基于 POJO/J2SE的,不跟任何的客户端或者协议绑定。

Shiro 的认证和签权可以通过 JDBC、LDAP 或者 Active Directory 来访问数据库、目录服务器或者 Active Directory 中的人员以及认证 / 签权信息。

SessionManager 通过会话 DAO 可以将会话保存在 cache 中,或者固化到数据库或文件系统中。

从 Shiro 的框架图,已经能够体会到这个工具的简单了。

下面让我们来看看Shiro 是如何工作的。

先了解一下它的安全模型吧!见下图:图 2. 安全模型上图中,涉及了 Shiro 的五个概念:•Subject 是安全领域术语,除了代表人,它还可以是应用。

在单应用中,可将其视为 User 的同义词。

•Principal 是 Subject 的标识,一般情况下是唯一标识,比如用户名。

•Role 和 Permission 分别代表了不同粒度的权限,从上图中可以看出Role 的粒度更大些,Permission 代表了系统的原子权限,比如数据的修改、删除权限。

对于简单的权限应用,可以不需要 Permission。

•Realm 是一个执行者,负责真正的认证和鉴权。

实现应用的安全模块的关键在于:定义合适的 role 和 permission,这就需要遵循如下原则:1.role 没有实质内容,只是代表一组 permission,目的是为了管理的方便,一般都是动态定义;2.permission 一般都是预先定义好的,不允许动态改变,除非源代码改动,它才会变化,它是整个安全模块的基础;3.要使 permission 也能动态定义,并非不可能,但是这将使鉴权非常复杂,甚至可能导致鉴权语句遍布整个程序,得不偿失;4.当然有一个例外:如果知道 permission 动态定义的规则和鉴权规则,如 Grails 的 fileter 中“${controllerName}:${actionName}:${params.id}”也可实现permission 的动态定义理解 Shiro 的架构和安全模型了,我们来看看更具体些的内容。

下图显示了Shiro 中的关键概念类(参考资料 -- JSecurity Mini Guide)。

图 3. 关键类AuthenticationToken 和 AuthenticationInfo前者在认证前使用,描述认证所需的信息,最常用的就是 username 和password 对;后者在认证后使用,内容同前,但是表示已经经过认证的信息。

RememberMe代表的是一种可能状态,并不表示该 Subject 已经经过了认证。

对于一些普通的操作,这种可能状态并无大碍,但一旦涉及安全敏感的操作,必须经过认证。

Credentials 和 CredentialsMatcherCredentials 是 Subject 的证书,在认证时使用,最常用的就是 password。

在通常情况下,为了安全起见,Subject 的 credentials 都需要加密保存,于是 CredentialsMatcher 的作用就体现出来了,见下图:图 4. CredentialsMatcher 的作用这里 CredentialsMatcher 需要将加密后的证书跟用户登录时提供的证书进行比对,完成认证的过程。

PAM= Pluggable Authentication Modules在有多个 Realm 的时候使用。

由认证策略决定认证结果,即 PAM= Relams + 认证策略。

一般的策略有 3 种:AllSuccessful、AtLeastOneSuccessful 和FirstSuccessful。

AuthorizationInfo可以看成是 Role + Permission 的组合体。

PermissionResolver 和 Permission它们之间的关系如下:图 5. PermissionResolver 和 Permission 的关系在 Shiro 中,权限被转化为一种字符串描述(字符串分级表示,称之为WildcardPermission),从而将权限转化为类似于对象 equals 的操作(Shiro 中的 implies 方法)。

内置的权限有 2 个:•AllPermission,总是返回 true•WildcardPermission,权限字符串的表示方式。

这里重点声明一下。

WildcardPermission 是 Shiro 的精妙之处,我们可以将权限表示成字符串,这样对权限的控制可以不拘泥于物理存储,比如对messagge 类具有修改和删除权限可以标识为:message:update,delete:*,其中‘ * ’表示所有;第一级分隔符为‘ : ’;第二级分隔符为‘ , ’,而对于权限字符串的解释完全可以由应用自己来定。

如果要比较权限字符串,可以使用 permission1.implies(permission2),它分别比较对应位置的字符串,在如下情况中,结果会返回 true:•permission1 中的子串有 * 或 permission1 子串 ==permission2 子串;•permission1 无子串,permission2 有;•permission1 有子串,permission2 无,permission1 的所有子串都是*。

总的说来,Shiro 中的 Permission 需要注意如下内容:1.权限的比较实际是字符串的比较,只不过是考虑到了字符串的分级2.字符串的分级划分完全由使用者自己决定,Shiro 的惯例是 3 级:资源 : 操作 : 实例。

3.字符串的使用必须一致,分隔符之间不要有空格,避免无意间引入的不一致。

如:定义使用“file : create, update : 1”,而验证使用“file : update”,那么分解之后一个是“ update ”,一个是“ update”,因空格而引起不等。

Realm这是一个实际访问安全实体的组件,一般是应用相关的,跟数据源的关系是 1-1。

它负责完成认证和鉴权,getAuthenticationInfo 代表了 login 的尝试,鉴权方法则由 Authorizer 继承而来。

此处也体现了 Shiro 代码的另一个特点,通过继承来扩充功能。

以常用的 JdbcRealm 为例,其继承链如下:图 6. JdbcRealm 的继承链Session它关联一个 Subject 的上下文,其作用类似于在 HttpSession 中保存用户标识,session 一旦过期,则重新登录。

Shiro 的 Session 是独立的,其目的是做到环境无关性。

为了利用 Web 环境中,Shiro 实现了一个直接使用HttpSession 的 WebSession。

SecurityManager这是一个Façade 接口,=Authenticator + Authorizer + SessionFactory。

在整体框架图中已经看到了它在 Shiro 中所处的位置。

相关文档
最新文档