目录
1. 简介
Apache Shiro™ is a powerful and easy-to-use Java security framework that performs authentication, authorization, cryptography, and session management. With Shiro’s easy-to-understand API, you can quickly and easily secure any application – from the smallest mobile applications to the largest web and enterprise applications.
Shiro 是一个功能强大且易于使用的Java安全框架,它执行身份验证、授权、加密和会话管理。使用Shiro易于理解的API,您可以快速轻松地保护任何应用程序—从最小的移动应用程序到最大的web和企业应用程序。
Shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架。
2. Shiro的核心架构
Shrio软件架构图:

2.1 Subject
- Subject----主体,代表了当前 “用户”,这个用户不一定是一个具体的人,将用户的概念理解为当前操作的主体,与当前应用交互的任何东西都是 Subject,如网络爬虫,一个运行的程序等;即一个抽象概念。
- Subject在shiro中是一个接口,接口中定义了很多认证授相关的方法,外部程序通过subject进行认证授
- Subject 都绑定到 SecurityManager,与 Subject 的所有交互都会委托给 SecurityManager;可以把 Subject 认为是一个门面;SecurityManager 才是实际的执行者,subject是通过SecurityManager安全管理器进行认证授权。
2.2 SecurityManager
- SecurityManager----安全管理器,对全部的subject进行安全管理,它是shiro的核心,负责对所有的subject进行安全管理。通过SecurityManager可以完成subject的认证、授权等,实质上SecurityManager是通过Authenticator进行认证,通过Authorizer进行授权,通过SessionManager进行会话管理等。
- SecurityManager是一个接口,继承了Authenticator, Authorizer, SessionManager这三个接口。
- 类比于SpringMVC,可以把它看成 DispatcherServlet 前端控制器。
2.3 Authenticator
- Authenticator----认证器,对用户身份进行认证。
- Authenticator是一个接口,shiro提供ModularRealmAuthenticator实现类,通过ModularRealmAuthenticator基本上可以满足大多数需求,也可以自定义认证器。
- 自定义实现中,需要认证策略(Authentication Strategy),即什么情况下算用户认证通过了。
2.4 Authorizer
- Authorizer----授权器或访问控制器,用户通过认证器认证通过,在访问功能时需要通过授权器判断用户是否有此功能的操作权限,即控制着用户能访问应用中的哪些功能。
2.5 Realm
- Realm----领域,相当于datasource数据源,securityManager进行安全认证需要通过Realm获取用户权限数据,比如:如果用户身份数据在数据库那么realm就需要从数据库获取用户身份信息。
- 可以有 1 个或多个 Realm,可以认为是安全实体数据源,即用于获取安全实体的;可以是 JDBC 实现,也可以是 LDAP 实现,或者内存实现等等,由用户提供。
注意:
- 不要把realm理解成只是从数据源取数据,在realm中还有认证授权校验的相关的代码。
- Shiro 不知道你的用户 / 权限存储在哪及以何种格式存储;所以我们一般在应用中都需要实现自己的 Realm;
3.6 SessionManager
- sessionManager----会话管理,如果写过 Servlet 就应该知道 Session 的概念,Session 呢需要有人去管理它的生命周期,这个组件就是 SessionManager。
- shiro框架定义了一套会话管理,它不依赖web容器的session,所以shiro可以使用在非web应用上,比如:普通的 JavaSE 环境、EJB 等环境。所以呢,Shiro 就抽象了一个自己的 Session 来管理主体与应用之间交互的数据;这样的话,比如我们在 Web 环境用,刚开始是一台 Web 服务器;接着又上了台 EJB 服务器;这时想把两台服务器的会话数据放到一个地方,这个时候就可以实现自己的分布式会话(将分布式应用的会话集中在一点管理,如把数据放到 Memcached 服务器),此特性可使它实现单点登录。
3.7 SessionDAO
- SessionDAO----会话数据访问对象,是对session会话操作的一套接口,DAO 大家都用过是数据访问对象,SessionDAO用于会话的 CRUD。
- 比如要将session存储到数据库,可以通过jdbc将会话存储到数据库;比如想把 Session 放到 Memcached 中,可以实现自己的 Memcached SessionDAO;另外 SessionDAO 中可以使用 Cache 进行缓存,以提高性能。
3.8 CacheManager
- CacheManager----缓存管理控制器,用来管理如用户、角色、权限等的缓存的,因为这些数据基本上很少去改变,将用户权限数据存储在缓存,这样可以提高访问的性能。
3.9 Cryptography
- Cryptography----密码模块,shiro提供了一套加密/解密的组件,方便开发。比如提供常用的散列、加/解密等功能。
Apache Shiro 是一个强大的 Java 安全框架,负责认证、授权、加密和会话管理。其核心包括 Subject、SecurityManager、Authenticator、Authorizer 和 Realm。Subject 作为用户主体,SecurityManager 是安全管理核心,Authenticator 处理认证,Authorizer 负责授权,而 Realm 提供数据源。SessionManager 和 SessionDAO 管理会话,CacheManager 处理缓存,Cryptography 支持加密操作。Shiro 的设计使得它可以在多种环境中灵活应用。
522

被折叠的 条评论
为什么被折叠?



