Shiro的整体架构:
shiro通过Secunrity Manager提供安全服务
Secunrity Manager管理着其他组件的实例
1、Authenticator(认证器):管理登录、登出。
2、Authorizer (授权器):赋予主体权限。用于用户的角色管理,给用户角色赋予什么权限
3、Session Manager(Session管理器):Shiro'自己实现的管理机制,不借用任何容器使用Session。回话管理
4、Session Dao(提供Session的操作): 主要有:增、删、改、查。
5、Cache Manager(缓存管理器):角色和权限数据缓存。
6、Pauggable Rwalms(数据库和数据源的桥梁):shiro获取数据是通过rwalms来获取。
流程:
1、主体提交请求到Secunrity Manager。
2、Secunrity Manager调用Authenticator进行认证。(Authenticator认证获取数据是通过realms获取的,再从数据源中获取信息)数据源信息和主体提交的信息作比对。
3、(Authorizer授权获取数据是通过realms获取的,再从数据源中获取信息)数据源信息和主体提交的信息作比对。
4、数据加密
Realms 是对数据库进行交互的,
从subject.login的login点击进去,走一遍源码
从checkRole点击进去走源码
自定义查询如上图
加密
shiro集成spring
过滤器拦截配置 DelegatingFilterProxy将我们的shiro交给spring容器来管理
HashedCredentialsMatcher加密
sessionId和session要进行捆绑
解决一次请求多个session的问题,把sessionkey中存储着request对象,把session放到request中去,第一次读取的时候读取redis,然后写入,后面在读取的时候直接从request中读取,这样就不用了多次请求了。
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user, password, getName());用来验证info和token的
return info 这个info是返回给底层的,不用管,写上就行