shiro原理及其运⾏流程介绍
什么是shiro
shiro是apache的⼀个开源框架,是⼀个权限管理的框架,实现 ⽤户认证、⽤户授权。
spring中有spring security (原名Acegi),是⼀个权限框架,它和spring依赖过于紧密,没有shiro使⽤简单。
shiro不依赖于spring,shiro不仅可以实现 web应⽤的权限管理,还可以实现c/s系统,分布式系统权限管理,shiro属于轻量框架,越来越多企业项⽬开始使⽤shiro。
使⽤shiro实现系统的权限管理,有效提⾼开发效率,从⽽降低开发成本。
shiro架构
subject:主体,可以是⽤户也可以是程序,主体要访问系统,系统需要对主体进⾏认证、授权。
securityManager:安全管理器,主体进⾏认证和授权都是通过securityManager进⾏。
authenticator:认证器,主体进⾏认证最终通过authenticator进⾏的。
authorizer:授权器,主体进⾏授权最终通过authorizer进⾏的。
sessionManager:web应⽤中⼀般是⽤web容器对session进⾏管理,shiro也提供⼀套session管理的⽅式。
SessionDao: 通过SessionDao管理session数据,针对个性化的session数据存储需要使⽤sessionDao。
cache Manager:缓存管理器,主要对session和授权数据进⾏缓存,⽐如将授权数据通过cacheManager进⾏缓存管理,和ehcache整合对缓存数据进⾏管理。
realm:域,领域,相当于数据源,通过realm存取认证、授权相关数据。
注意:在realm中存储授权和认证的逻辑。
cryptography:密码管理,提供了⼀套加密/解密的组件,⽅便开发。⽐如提供常⽤的散列、加/解密等功能。
⽐如 md5散列算法。
认证过程
认证执⾏流程
1、通过ini配置⽂件创建securityManager
2、调⽤subject.login⽅法主体提交认证,提交的token
3、securityManager进⾏认证,securityManager最终由ModularRealmAuthenticator进⾏认证。
4、ModularRealmAuthenticator调⽤IniRealm(给realm传⼊token) 去ini配置⽂件中查询⽤户信息
5、IniRealm根据输⼊的token(UsernamePasswordToken)从 shiro.ini查询⽤户信息,根据账号查询⽤户信息(账号和密码)如果查询到⽤户信息,就给ModularRealmAuthenticator返回⽤户信息(账号和密码)
shiro安全框架如果查询不到,就给ModularRealmAuthenticator返回null
6、ModularRealmAuthenticator接收IniRealm返回Authentication认证信息
如果返回的认证信息是null,ModularRealmAuthenticator抛出异常(org.apache.shiro.authc.UnknownAccountException)如果返回的认证信息不是null(说明inirealm到了⽤户),对IniRealm返回⽤户密码 (在ini⽂件中存在)
授权流程
**
**
1、对subject进⾏授权,调⽤⽅法isPermitted(“permission串”)
2、SecurityManager执⾏授权,通过ModularRealmAuthorizer执⾏授权
3、ModularRealmAuthorizer执⾏realm(⾃定义的Realm)从数据库查询权限数据
调⽤realm的授权⽅法:doGetAuthorizationInfo
4、realm从数据库查询权限数据,返回ModularRealmAuthorizer
5、ModularRealmAuthorizer调⽤PermissionResolver进⾏权限串⽐对
6、如果⽐对后,isPermitted中"permission串"在realm查询到权限数据中,说明⽤户访问permission串有权限,否则 没有权限,抛出异
常。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论