【shiro从入门到实战教程】第二章 Shiro简介

二、Shiro简介

2.1 什么是Shiro

Shiro是Apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权。

Spring中有Spring Security(原名Acegi),是一个权限框架,它和Spring依赖过于紧密,没有Shiro使用简单。

Shiro不依赖于Spring,Shiro不仅可以实现web应用的权限管理,还可以实现C/S系统,分布式系统权限管理,Shiro属于轻量框架,越来越多企业项目开始使用Shiro。

使用Shiro实现系统的权限管理,有效提高开发效率,从而降低开发成本。

2.2 三个主要的概念

Subject:简单理解为表示当前操作用户。

SecurityManager:用于管理所有的Subject。

Realms:用于进行权限信息的验证。

在这里插入图片描述

Subject:主体,当前参与应用安全部分的主体。可以是用户,可以是第三方服务,可以是cron任务,或者任何东西。主要指一个正在与当前软件交互的东西。所有Subject都需要SecurityManager,当与Subject进行交互,这些交互行为实际上被转换为与SecurityManager的交互。

SecurityManager:安全管理员,Shiro架构的核心,它就像Shiro内部所有原件的保护伞。然而一旦配置了SecurityManager,SecurityManager就用到的比较少,开发者大部分时间都花在Subject上面。当你与Subject进行交互的时候,实际上是SecurityManager在背后帮你举起Subject来做一些安全操作。

Realms:Realms作为Shiro和应用的连接桥,当需要与安全数据交互的时候,像用户账户,或者访问控制,Shiro就从一个或多个Realms中查找。Shiro提供了一些可以直接使用的Realms,如果默认的Realms不能满足你的需求,你也可以定制自己的Realms。

2.3 整体架构

在这里插入图片描述

  • Authenticator:认证器,管理登录与登出。
  • Authorizer:授权器,赋予主体权限。
  • Session Manager:session管理器,session管理机制。不借助任何web容器使用session。
  • Session Dao:session操作,主要增删改查。
  • Cache Manager:缓存管理器。
  • Pluggable Realms(1 or more):shiro与数据库的连接,认证授权校验。
  • Cryptography: 数据加密。

2.4 核心组件

Subject 即主体,外部引用于 Subject 进行交互,Subject 记录了当前操作用户,将用户的概念理解为当前操作的主体,可能是一个通过浏览器请求的用户,也可能是一个运行的程序。Subject 在 Shrio 中是一个接口,接口中定义了很多认证授权相关的方法,外部程序通过 Subject 进行认证授权,而 Subject 是通过 SecurityManager 安全管理器进行认证授权的。

SecurityManager 即安全管理器,对全部的 Subject 进行安全管理,它是 Shrio 的核心,通过 SecurityManager 可以完成全部 Subject 的认证、授权等。实质上 SecurityManager 是通过 Authenticator 进行认证,通过 Authorizer 进行授权,通过 SessionManager 进行会话管理等。SecurityManager是一个接口,继承了 Authenticator,Authorizer,SessionManager 这三个接口。

Authenticator 即认证器,对用户身份进行认证,Authenticator 是一个接口,Shrio 提供了 ModularRealmAuthenticator实现类,通过ModularRealmAuthenticator 基本上可以满足大多数需求,也可以自定义认证器。

Authorizer 即授权器,用户通过认证器认证通过,在访问功能时需要通过授权器判断用户是否有此功能的操作权限。

Realm 即领域,相当于 datasource 数据源,SecurityManager 进行安全认证需要通过 Realm 获取用户权限数据,比如:如果用户身份数据在数据库,那么 Realm 就需要从数据库获取用户身份信息。不要把 Realm 理解成只是从数据源取数据,在 Realm 中还有认证授权校验的相关代码。

SessionManager 即会话管理,Shrio 框架定义了一套会话管理,它不依赖 web 容器的 Session ,所以Shrio 可以使用在非 Web 应用上,也可以将分布式应用的会话集中在一点管理,此特性可使它实现单点登录。

SessionDAO 即会话DAO,是对 Session 会话操作的一套接口,比如要将 Session 存储到数据库,可以通过 jdbc 将会话存储到数据库。

CacheManager 即缓存管理,将用户权限数据存储在缓存,这样可以提高性能。

Cryptografy 即密码管理,Shrio 提供了一套解密/加密的组件,方便开发。比如提供常用的散列、加/解密功能。

猜你喜欢

转载自blog.csdn.net/ligonglanyuan/article/details/125677793