1、shiro 是什么
shiro 是一个功能强大和易于使用的Java安全框架,为开发人员提供一个直观而全面的解决方案的认证,授权,加密,会话管理。
2、Shiro四大核心功能:Authentication,Authorization,Cryptography,Session Management
3.Shiro三个核心组件:Subject, SecurityManager 和 Realms.
Subject:主体,代表了当前“用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是Subject,如网络爬虫,机器人等;即一个抽象概念;所有Subject都绑定到SecurityManager,与Subject的所有交互都会委托给SecurityManager;可以把Subject认为是一个门面;SecurityManager才是实际的执行者;
SecurityManager:安全管理器;即所有与安全有关的操作都会与SecurityManager交互;且它管理着所有Subject;可以看出它是Shiro的核心,它负责与后边介绍的其他组件进行交互,如果学习过SpringMVC,你可以把它看成DispatcherServlet前端控制器;
Realm:域,Shiro从Realm获取安全数据(如用户、角色、权限),就是说SecurityManager要验证用户身份,那么它需要从Realm获取相应的用户进行比较以确定用户身份是否合法;也需要从Realm得到用户相应的角色/权限进行验证用户是否能进行操作;可以把Realm看成DataSource,即安全数据源。
4、shiro认证流程
1、Shiro把用户的数据封装成标识token,token一般封装着用户名,密码等信息;
2、使用Subject门面获取到封装着用户的数据的标识token;
3、Subject把标识token交给SecurityManager,在SecurityManager安全中心中,SecurityManager把标识token委托给认证器;Authenticator进行身份验证。认证器的作用一般是用来指定如何验证,它规定本次认证用到哪些Realm;
4、认证器Authenticator将传入的标识token,与数据源Realm对比,验证token是否合法。
shiro的授权
RBAC所代表的是对角色进行控制,即只控制资源与角色之间的关系,并且一般来说这里的资源粒度只是细化到页面,但是对于一些要求更加细致的权限控制(控制到按钮)单纯的架构层面就无法满足,此时就需要程序员对页面进行处理,架构层面的需要后期处理就说明设计模式有所欠缺。
RBAC新解所代表的是粒度比RBAC对资源划分更加细化,它直接对访问资源的任何操作做权限控制
参看博文:“RBAC”和“RBAC新解”_xk147258的博客-CSDN博客_rbac新解
这里我们只看在源码中,shiro的授权流程是怎样的
SpringMVC 异常统一处理的三种方式:
- 使用 @ExceptionHandler 注解
- 实现 HandlerExceptionResolver 接口
- 使用 @ControllerAdvice 注解
总结
当以上三个方式,一起出现时,只执行执行范围最小的方式,后面的方式不再执行处理;
执行范围:@ExceptionHandler < @ControllerAdvice+@E..Handler < HandlerExceptionResolver
人话:当某个Mapping方法发生异常后,先由@ExceptionHandler 处理;如果没有上者,则由@ControllerAdvice+@E..Handler 处理;如果没有上者 则由 HandlerExceptionResolver 处理
1、ExceptionHandler参数为 要处理器的 异常类(或子类)
2、校验框架的异常处理
4、算数异常