Shiro五大功能
- 认证:用户身份认证,也就是登陆;
- 授权-访问控制:通过一些配置,用户登录后会自动被赋予相应的身份和操作权限,实现访问控制;
- 密码加密-保护或隐藏数据防止被偷窥;
- 会话管理
- 缓存
Shrio与SpringSecurity对比
- Spring Security:除了不能脱离Spring,shiro具有的功能它都有,权限细粒度高,还提供许多其它的功能(笔者没用过,具体哪些功能不清楚),而shiro则需要手动去实现。但是与shiro相比,操作太复杂,概念多,难理解,学习成本高
- shiro:使用简单直接,上手快,控制粒度可糙可细,扩展性强,自由度高,学习成本低。但功能比Spring Security要少些
- 个人观点:我认为在满足基本功能需求的情况下具有下面这两个要素就可以称之为好框架了
- 一是简单易用,学习成本低。二是扩展性强,自由度高
- shiro无疑比Spring Security更具有优势,虽然Spring Security功能更强,但shiro具有的功能已经能满足大部分开发需求了
Shiro结构
- Authenticator:用于身份认证
- Authorizer:授权,访问控制。比如某个用户是否具有某个操作的使用权限
- Session Manager:session管理器
- Session DAO:提供session的一些操作,主要是增删改查
- Cache Manager:缓存管理器
- Cryptography(加密):在对数据源使用加密算法加密的同时,保证易于使用
- Realm:可理解为shiro和数据库、数据源的一个桥梁。用于进行权限信息的验证,我们自己实现。Realm 本质上是一个特定的安全 DAO:它封装与数据源连接的细节,得到Shiro 所需的相关的数据。在配置 Shiro 的时候,你必须指定至少一个Realm 来实现认证(authentication)和/或授权(authorization)。
我们需要实现Realms的Authentication 和 Authorization。其中 Authentication 是用来验证用户身份,Authorization 是授权访问控制,用于对用户进行的操作授权,证明该用户是否允许进行当前操作,如访问某个链接,某个资源文件等。
shiro认证过程
- 创建securityManager对象,构建securityManager环境
- 主体提交认证请求,即图上方的箭头
- 主体提交的请求到securityManager认证
- securityManager使用authenticator做认证
- authenticator做认证时通过realm获取数据,最后调用realm做最后验证
Shiro授权过程
- 创建securityManager对象,构建securityManager环境
- 主体提交授权请求,即图上方的箭头
- 主体提交的请求到securityManager授权
- securityManager使用authorizerr做授权
- authorizerr做授权时通过realm从缓存或者数据库中获取授权数据,最后调用realm做最后验证授权