权限学习--Shiro入门学习

 Shiro是一款全面的蕴含丰富功能的安全框架。Shiro功能框架图如下:



Authentication(认证)Authorization(授权)、Session Management(会话管理)、Cryptography(加密)被Shiro开发团队称为应用安全的四大基石。

Authentication(认证):用户的识别,通常被认为是用户的登录。

Authorization(授权):访问控制,比如某个用户是否具有某个操作的使用权限。

Session Management(会话管理):特定于用户的会话管理。

Cryptography(加密):对数据源使用加密算法的同时,保证它容易使用。

还有其他功能来支持和加强这些不同环境应用下安全领域的关注点。特别是对以下功能的支持:

web SupportShiro提供的web支持api可以轻松的保证web应用程序的安全。

Caching:缓存是Shiro保证安全快速操作的重要操作手段

Concurrency:并发Shiro支持多线程应用程序并发特性

Testing:测试,支持单元测试和集成测试

Run as :该功能在许可的前提下,允许用户假设另一个用户的身份

Remember Me:可以跨session记录用户身份,只有在强制需要时才需要登录。

Shiro不会去维护用户和权限,需要我们自己去提供及实现,然后通过相关接口注入给Shiro

高级别的概述图:



在概念层Shiro架构主要包含三个主要的理念:SubjectSecurityManagerRealm,上图展示了这些组件之间是如何相互作用的。

Subject:代表了当前的用户,可以是一个人也可以是第三方服务守护进程的账户、始终守护任务或者其他软件和当前软件交互的其他任何事件。它是一个抽象的概念,所有Subject都绑定到SecurityManager,与Subject所有交互都会委托给SecurityManager,可以把Subject认为是一个门面SecurityManager才是实际的执行者。

SecurityManager:是一个安全管理器,即所有与安全有关的操作都会与SecurityManager交互,其管理者所有的Subject,它是Shiro的核心,他负责与后面组件的交互。

Realm:是领域的概念,ShrioRealm中获取安全数据,包括用户、角色、权限等。SecurityManager要验证身份,需要从Realm获取相应的用户进行比较比较,以确定用户身份是否合法,也需要从Realm得到相应的角色以及权限进行验证用户是否进行操作,可以把Realm看出datasource',即安全的数据源。

整体流程:应用代码通过Subject来进行授权和认证,而Subject委托给SecurityManager,此时需要将Realm注入给SecurityManager,从而让SecurityManager得到合法的用户及其权限进行判断。

 

Shiro架构图:



Authenticator:用户管理器,该组件主要用于处理用户的登录逻辑,它通过调用realm接口来判断当前登录用户的身份,这里涉及到用户认证策略,比如系统中配置了多个realm,则需要协调这些realm以便决定这些用户的认证是成功还是失败。

Authorizer:权限管理器,该组件主要用于用户的访问控制,跟Authenticator类似,Authorizer也知道怎么协调多个realm数据源的数据,它有自己的一套策略。

Session Manager:会话管理器,该组件用于创建会话、管理用户会话的生命周期,以便在所有运行环境下都可以给用户提供一个健壮的会话管理体验。Shiro都可以在本地管理用户会话即便没有WebEJB容器也可以。如果环境下有会话管理机制,则shiro会默认使用当前环境的会话管理机制,而想控制台程序这种独立的应用程序没有会话管理机制时,shiro就会使用内部的会话管理器来个应用开发提供一致的编程体验。

Session Dao:允许用户使用任何程序的数据源来存储session数据,它主要是用来代替Session Manager执行Session相关的增删改查。这个借口允许我们将任意种类的数据存储方式引入到Session管理的基础框架之中。

Cache Manager:缓存管理器,该组件用户创建和维护一些在其他shiro组件中用的cache实例,维护这些cache实例生命周期。缓存用于存储从后端获取的用户验证及权限方面数据来提供性能。在获取数据时,先是从缓存中查找,如果没有再调用后端接口从其他数据源获取。

Cryptography:加密组件,包含了一些易于使用的加密hash辅助类。Realm是连接shiro和安全数据的桥梁,任何时候当shiro需要进行登录或者访问控制的时候都需要调用已经配置的realm接口去获取数据。一个应用程序可以配置一个或多个realm,通常来说一个数据源会配置一个。

 

Shiro支持两种角色模式:第一种是传统角色,一个角色代表一系列的操作,当需要对某个操作进行授权验证时,只需要判断是否是该角色即可。这种角色权限相对简单,模糊,不利于拓展。第二种是权限角色,一个角色拥有一个权限的集合,授权验证时判断当前用户是否用于该权限,这种角色权限可以对该角色进行详细的权限描述,适合更复杂的权限设计。


猜你喜欢

转载自blog.csdn.net/qq_34871626/article/details/78697797
今日推荐