Apache Shiro简单描述

什么是Apache Shiro?

           Apache Shiro是一种功能强大且易于使用的Java安全框架,它执行身份验证,授权,加密和会话管理,可用于保护任何应用程序的安全-从命令行应用程序,移动应用程序到最大的Web和企业应用程序。




在这里插入图片描述

Shiro提供了应用程序安全性API来执行以下方面(我喜欢将它们称为应用程序安全性的4个基石):
  • 身份验证(Authentication)-证明用户身份,通常称为用户“登录”。验证用户是不是拥有相应用户

  • 授权(Authorization)-访问控制,即权限验证,验证某个已验证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色;或者细粒的验证某个用户对某个资源是否具有某个权限;

  • 加密(Cryotography)-保护或隐藏数据以防窥视,保护数据的安全性,如密码加密储存到数据库,而不是明文储存;还有其他的功能来支持和加强这些不同应用环境下安全领域的关注点;

  • 会话管理(Session Manager)-每个用户的时间敏感状态,即用户登陆后就是一次会话,在没有退出去之前,他的所以信息都在会话中;如果是普通的javaSE环境的,也可以是如web环境的;

还有其他的功能来支持和加强这些不同应用环境下安全领域的关注点:
  • Web Support: Web支持,可以非常容易的集成到Web环境;

  • Caching:缓存,比如用户登陆后,其用户信息、拥有的角色 / 权限不必每次去查,这样可以提高效率

  • Concurrency:Shiro支持多线程应用的并发验证,既如在一个线程中开启另一个线程,能把权限自动传播过去;

  • Testring:提供测试支持

  • Run As:允许一个用户假装为另一个用户(如果他们允许)的身份进行访问;

  • Remember Me:记住我,这是哥非常常见的功能。即一次登陆后,下次来的话不用登陆了

为什么要使用Apache Shiro?

           自2003年以来,框架环境发生了很大变化,因此今天仍然有充分的理由使用Shiro。实际上有很多原因。Apache Shiro是:
  • 易于使用是该项目的最终目标。应用程序安全性可能非常令人困惑和沮丧,并被视为“必要的邪恶”。如果您使它易于使用,以使新手程序员可以开始使用它,那么就不必再痛苦了。

  • 全面 -Apache Shiro声称没有其他具有范围广度的安全框架,因此它可能是满足安全需求的“一站式服务”。

  • 灵活 -Apache
    Shiro可以在任何应用程序环境中工作。虽然它可以在Web,EJB和IoC环境中运行,但不需要它们。Shiro也不要求任何规范,甚至没有很多依赖性。

  • 具有Web功能 -Apache
    Shiro具有出色的Web应用程序支持,使您可以基于应用程序URL和Web协议(例如REST)创建灵活的安全策略,同时还提供一组JSP库来控制页面输出。

  • 可插拔-Shiro干净的API和设计模式使它易于与许多其他框架和应用程序集成。您会看到Shiro与Spring,Grails,Wicket,Tapestry,Mule,Apache
    Camel,Vaadin等框架无缝集成。

  • 受支持 -Apache Shiro是Apache Software
    Foundation(Apache软件基金会)的一部分,事实证明该组织的运作符合其社区的最大利益。项目开发和用户群体友好的公民随时可以提供帮助。如果需要,像Katasoft这样的商业公司也可以提供专业的支持和服务。

Shiro架构

1.Shiro的外部架构

首先,我们从外部看Shiro,既应用程序的角度来观察Shiro工作流程
在这里插入图片描述
           可以看到应用代码直接交互的对象是Subject,也就是说Shiro的对外API核心就是Subject;其每个API的含义如下:

  • Subject:主体,代表了当前 “用户”,这个用户不定是 一个具体的人,与当前应用交互的任何东西都能是Subject,
    如网络爬虫,机器人等,即一个抽象概念。所有Ssubject都绑定到SecurityManager, 与Subject
    的所有交互都会委托给SecurityManager,可以把Subject 人カ是一个门面,SecurityManagerオ是实际的执行者

  • SecurityManager:安全管理器,即所以与安全有关的操作都会与SecurityManager交互,它管理着所有的Subject;可以看出它是Shiro的核心,它负责与后面介绍的其他组件进行交互,如果学过Spring
    MVC你可以把它看做成DispatcherServlet前端控制器

  • Realm:域,Shiro从Realm对象获取安全数据(如用户,角色,权限),也就是说SecurityManager需要验证用户身份,那么它需要从Realm获取相对应的用户进行比较确定用户的身份是否合法(是否存在);也需要从Realm得到用户相应的角色
    / 权限进行验证是否能进行操作;可以把Realm看出DataSource(安全数据源)

2.Shiro的核心架构

Shiro的核心架构图如下:
在这里插入图片描述

  • Subject(主体):当前与软件进行交互的实体(用户,第三方服务,cron job,等等)的安全特定“视图”。

  • SecurityManager(安全管理器):如上所述,SecurityManager是Shiro架构的心脏。它基本上是一个“保护伞”对象,协调其管理的组件以确保它们能够一起顺利的工作。它还管理每个应用程序用户的Shiro
    的视图,因此它知道如何执行每个用户的安全操作。

  • Authenticator(认证器):Authenticator是一个对执行及对用户的身份验证(登录)尝试负责的组件。当一个用户尝试登录时,该逻辑被
    Authenticator执行。Authenticator知道如何与一个或多个Realm协调来存储相关的用户/帐户信息。从这些Realm中获得的数据被用来验证用户的身份来保证用户确实是他们所说的他们是谁。

  • Authentication
    Strategy(认证策略):如果不止一个Realm被配置,则AuthenticationStrategy将会协调这些Realm来决定身份认证尝试成功或失败下的条件(例如,如果一个Realm成功,而其他的均失败,是否该尝试成功?是否所有的Realm必须成功?或只有第一个成功即可?)。

  • Authorizer(授权器):Authorizer是负责在应用程序中决定用户的访问控制的组件。它是一种最终判定用户是否被允许做某事的机制。与
    Authenticator相似,Authorizer也知道如何协调多个后台数据源来访问角色恶化权限信息。Authorizer使用该信息来准确地决定用户是否被允许执行给定的动作。

  • SessionManager(会话管理器):SessionManager知道如何去创建及管理用户Session生命周期来为所有环境下的用户提供一个强健的Session体验。这在安全框架界是一个独有的特色——Shiro拥有能够在任何环境下本地化管理用户Session的能力,即使没有可用的Web/Servlet或EJB容器,它将会使用它内置的企业级会话管理来提供同样的编程体验。SessionDAO的存在允许任何数据源能够在持久会话中使用。

  • SessionDAO:SesssionDAO代表SessionManager执行Session持久化(CRUD)操作。这允许任何数据存储被插入到会话管理的基础之中。

  • CacheManager(缓存控制器):CacheManager创建并管理其他Shiro组件使用的Cache实例生命周期。因为Shiro能够访问许多后台数据源,由于身份验证,授权和会话管理,缓存在框架中一直是一流的架构功能,用来在同时使用这些数据源时提高性能。任何现代开源和/或企业的缓存产品能够被插入到Shiro来提供一个快速及高效的用户体验。

  • Cryptography(密码模块):Cryptography是对企业安全框架的一个很自然的补充。Shiro的crypto包包含量易于使用和理解的cryptographic
    Ciphers,Hasher(又名digests)以及不同的编码器实现的代表。所有在这个包中的类都被精心地设计以易于使用和易于理解。任何使用Java的本地密码支持的人都知道它可以是一个难以驯服的具有挑战性的动物。Shiro的cryptoAPI
    简化了复杂的Java机制,并使加密对于普通人也易于使用。

  • Realms:如上所述,Realms在Shiro和你的应用程序的安全数据之间担当“桥梁”或“连接器”。当它实际上与安全相关的数据如用来执行身份验证(登录)及授权(访问控制)的用户帐户交互时,Shiro从一个或多个为应用程序配置的Realm中寻找许多这样的东西。你可以按你的需要配置多个Realm(通常一个数据源一个Realm),且Shiro将为身份验证和授权对它们进行必要的协调。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值