一.Shiro简介
shiro是一款主流的权限控制框架,主要起到的权限控制作用为
- 认证 Authentication
- 授权 Authorization
简单来说 认证就是验证''你是谁'',例如输入用户名密码正确后才能登陆,而授权则是验证你是谁之后确定''你能做什么'',例如超级管理员有增删改查的权限,而普通用户只有查的权限.当然,shiro不止这些功能,shiro还可以提供加密,会话管理,缓存,web集成等功能
二.shiro概念解释
首先来看一张shiro的架构图
shiro主要是由Subject, Security Manager,Authenticator,AUthorizer,Realm这些部分组成,平时用的最多的也就是这些,下面对这些这些模块进行一一解释
Subject
主体对象,是外部应用与shiro交互的一个对象,记录当前操作的用户,可以将一个Subject理解成一个个登录的用户,然后外部应用通过一个个Subject进行验证授权,而所有的subject都由Security Manager(安全管理器)进行统一的管理
Security Manager
顾名思义,即安全管理器,主要功能用于管理所有的Subject,然后将这些Subject携带的信息交由认证器( Authenticator)和授权器(AUthorizer)进行验证和授权,是整个shiro的核心
Authenticator和AUthorizer
验证器和授权器,用于对身份进行验证,以及在验证通过时用户访问某功能通过授权期来判断用户是否用访问某资源的权限,可以支持自定义。
Realm
比较难理解的一个概念,可以说是真正进行授权和认证的地方,一般 Authentication和Authorization都是在Realm中进行, Shiro 从从 Realm 获取安全数据(如用户、角色、权限),就是说 SecurityManager 要验证用户身份,那么它需要从 Realm 获取相应的用户进行比较以确定用户身份是否合法;也需要从 Realm 得到用户相应的角色 / 权限进行验证用户是否能进行操作;可以把 Realm 看成 DataSource,即安全数据源。 一般Realm都是自定义的,通俗来讲,Realm是用于验证Subject的数据是否合法
principals 和 credentials
principals :身份,即主体的标识属性,可以是任何东西,如用户名、邮箱等,唯一即可。一个主体可以有多个 principals,但只有一个 Primary principals,一般是用户名 / 密码 / 手机号。
credentials:证明 / 凭证,即只有主体知道的安全值,如密码 / 数字证书等。
三.小结:
总得来说,一个最简单的shiro应用验证的过程就是这样,用户外部应用进行访问,Subject记录这些信息委托给Security Manager进行管理,注入到自定义的Realm进行验证授权等操作, 从而让 SecurityManager 能得到合法的用户及其权限进行判断。