SpringBoot学习总结(八)-安全框架Shiro

122 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 10 天,点击查看详情

前两篇文章讲述了SpringSecurity框架,相比全面但繁重的SpringSecurity框架,日常开发中接触较多的就是Shiro;Shiro是Apache的开源权限管理框架,是可以实现用户认证授权,还可以实现C/S系统,分布式系统的权限管理的轻量级框架;

主要功能

图片.png 该图片为该框架中主要支持的功能点;

Authentication身份认证,Authorization授权,SessionManagement会话管理,Cryptography数据加密,WebSupport支持集成WEB环境,Caching缓存,Comcurrency多线程并发验证,Testing测试支持,RunAs模仿其他经过允许的用户身份,RememberMe记住我;

Shiro架构

图片.png

Shiro包含三大主体:Subject主体,ShiroSecurityManager,Realm,整体流程为通过主体进行认证授权,主体是通过安全管理器来进行管理判断是否合法,安全管理器获取域中合法数据进行校验;

Subject:主体,与应用代码直接交互,也是该框架的对外API核心,代表的是与当前应用交互的主体,爬虫,用户或者机器人都可以,由Subject绑定到SecurityManager执行;

SecuriytManager:安全管理器,所有安全相关操作由Subject提交,由安全管理器进行管理,它负责与其他组件进行交互,它又包含以下几个主体部分:

(1:Authenticator:认证器,通过默认方式或者自定义方式来实现用户认证;
(2:Authorizer:授权器,认证之后判断用户权限,是否可以访问资源或使用功能;
(3:SessionManager:管理session声明周期,shiro通过抽象出一个自己的session管理器来管理,还可以实现分布式会话;
(4:SessionDao:数据访问对象,用来保存或操作session进行缓存,提高性能;
(5:CacheManager:缓存管理器,管理用户,角色,权限等信息缓存;
(6:Cryptography:进行数据加密解密;

Realm:域,安全数据源,框架从该域中获取用户,权限,角色等安全数据,安全管理器校验用户身份时通过获取域中的信息进行比较数据是否合法;

图片.png

认证流程 身份认证流程中首先获取SecuriytManager工厂初始化安全管理器,然后根据用户登录信息(用户名,密码)获取token,然后使用token调用Subject.login(token)进行登录验证,安全管理器委托给Authenticator根据身份验证逻辑进行校验,可以通过自定义来实现校验逻辑,如果存在多个Realm,Authenticator会委托给ModularRealmAuthenticator来调用AnthenticaitionStrategy根据相应顺序及策略进行多Realm验证,返回验证结果;

授权流程 权限管理流程中会通过Subject.isPermitted*/hasRole* 接口,其会委托给 SecurityManager,而 SecurityManager 接着会委托给 Authorizer,Authorizer会通过PermissionResolver将字符串转换成相应的Permission实例,在授权前会从Realm中获取主体相应的角色,权限用来匹配传参是否匹配,当多Realm时会和认证相同进行多Realm校验,返回授权校验结果;