1、Shiro的三个核心组件
- Subject:正与系统进行交互的人,或某一个第三方服务。所有 Subject 实例都被绑定到一个SecurityManager 上,其实就是用于获取外部数据的主体。
- SecurityManager:Shiro 架构的心脏,用来协调内部各安全组件,管理内部组件实例,并通过它来提供安全管理的各种服务,负责和Shiro其他组件交互
- Realm:shiro 是从 Realm 来获取安全数据(用户,角色,权限)。就是说 SecurityManager要验证用户身份,那么它需要从 Realm 获取相应的用户进行比较以确定用户身份是否合法;也需要从Realm 得到用户相应的角色/权限进行验证用户是否能进行操作;可以把 Realm 看成 DataSource,即安全数据 源。
2、Shiro的运行流程
- 首先调用Subject.login(token)进行登录,他会委托给SecurityManager
- SecurityManager负责真正的身份验证逻辑;它会委托给Authenticator进行身份验证;
- Authenticator会把相应的token传入Realm,从Realm获取身份验证信息,如果没有就返回认证失败,有的话就继续执行操作。
3、Shiro认证策略
- AtLeastOneSuccessfulStrategy:只要有一个(或更多)的 Realm 验证成功,那么认证将视为成功
- FirstSuccessfulStrate