每天分享java干货,欢迎关注 ,你的成功源于点点滴滴!
前言
Shiro解决了什么问题?
互联网无非就是一些用户C想要使用一些服务S的资源去完成某件事,S的资源不能说给谁用就给谁用,因此产生了权限的概念,即C必须有权限才能操作S的资源。S如何确定C就是C呢?因此又产生了身份验证的概念。一个Authorization一个Authentication就是Shiro解决的最重要的两个问题,其他的功能都是给Shiro打辅助的,比如Session管理,加密处理,记住我等。
Shiro是什么?
把Shiro想象成一家安全公司
公司给服务端提供的服务是:服务端把自己维护的权限啊、用户啊、角色啊什么的信息通过接口提供给Shiro,shiro就可以帮服务端处理用户权限角色等的安全认证和授权等工作
公司给客户提供的服务是:客户可以是任何外来的东西,但是想要访问服务端提供的要求权限验证等资源,就必须先经过shiro这层把关,shiro会对客户进行安全认证和授权等工作
image.png
Shiro重要概念有哪些?
image.png
- Subject:可以理解为与shiro打交道的对象,该对象封装了一些对方的信息,shiro可以通过subject拿到这些信息
- SecurityManager:Shiro的总经理,通过指使Authorizer和Authenticator等对subject进行授权和身份验证等工作
- Realm:管理着一些如用户、角色、权限等重要信息,Shiro中所需的这些重要信息都是从Realm这里获取的,Realm本质上就是一个重要信息的数据源
- Authenticator:认证器,负责Subject的认证操作,认证过程就是根据Subject提供的信息通过Realm查询到相关信息,然后做对比,支持扩展
- Authorizer:授权器,控制着Subject对服务资源的访问权限
- SessionManager:用于管理Session,这个Session可以是web的也可以不是web的。
- SessionDao:把Session的 CRUD和存储介质联系起来的工具,存储介质可以是数据库,也可以是缓存,比如把session放到redis里面
- CacheManager:缓存控制器,Realm管理的数据(用户、角色、权限)可以放到缓存里由CacheMana