shiro

shiro

shiro

shiro

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 是对数据库进行交互的,

shiro

shiro

从subject.login的login点击进去,走一遍源码

 

shiro

shiro

shiro

从checkRole点击进去走源码

shiro

shiro

shiro

shiro

shiro

shiro

shiro

加密

shiro shiro集成spring

shiro

过滤器拦截配置 DelegatingFilterProxy将我们的shiro交给spring容器来管理

shiro

shiro

HashedCredentialsMatcher加密

shiro

shiro

shiro

shiro

shiro

sessionId和session要进行捆绑

shiro

解决一次请求多个session的问题,把sessionkey中存储着request对象,把session放到request中去,第一次读取的时候读取redis,然后写入,后面在读取的时候直接从request中读取,这样就不用了多次请求了。

shiro

shiro

SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user, password, getName());用来验证info和token的

return info 这个info是返回给底层的,不用管,写上就行