Shiro概要架构
在概念层面,Shiro 架构包含三个主要的理念:
Subject :主体对象,负责提交用户认证和授权信息。
SecurityManager:安全管理器,负责认证,授权等业务实现。
Realm:领域对象,负责从数据层获取业务数据。
Shiro认证流程
1)系统调用subject的login方法将用户信息提交给SecurityManager。
2)SecurityManager将认证操作委托给认证器对象Authenticator。
3)Authenticator将用户输入的身份信息传递给Realm。
4)Realm访问数据库获取用户的信息然后对信息进行封装并返回。
5)Authenticator对Realm返回的信息进行身份认证。
核心业务分析
1)客户端请求到达Controller,Controller里调用subject.login方法拿到用户的信息,把用户的信息通过token进行封装然后传递给SecurityManager。
2)SecurityManager是接口,所以通过配置DefaultWebSecurityManager实现类进行认证。
3)DefaultWebSecurityManager拿到用户信息后调用Authenticator完成认证。
4)Authenticator有了用户信息还要调用Realm中的相关方法获取数据库中的数据来进行认证。
5)按照shiro框架定义的规范写一个ShiroRealm对象,通过该对象借助Dao获取数据,然后在Authenticator中完成认证。
授权流程分析
1)系统调用subject相关方法将用户信息(例如isPermitted)递交给SecurityManager。
2)SecurityManager将权限检测操作委托给Authorizer对象。
3)Authorizer将用户信息委托给realm。
4)Realm访问数据库获取用户权限信息并封装。
5)Authorizer对用户授权信息进行判定。
授权访问实现:
在需要进行授权访问的业务层方法上添加执行此方法需要的权限标识,例如@RequiresPermissions(“sys:user:update”)
说明:此要注解一定要添加到业务层方法上。