安全框架·shiro
官网:shiro.apache.org
目录:
shiro 概念
Shiro 框架认证拦截实现
Shiro 框架认证业务实现
Shiro 中授权过程的实现
授权业务 DAO 实现
Shiro安全框架
1. shiro概念:
Shiro是apache旗下一个开源的安全框架,可以将软件中安全认证相关的功能提取出来,实现用户身份认证,权限授权,加密功能,组成了一个通用的安全框架
官方截图
Subject: 主体对象,负责提交用户的认证以及授权信息
SecurityManager: 安全管理器,负责认证,授权等业务实现
Realm: 领域对象,负责从数据层获取数据
Shiro详细架构:
Subject: 主体对象,负责提交用户的认证以及授权信息
SecurityManager: 安全管理器,负责认证,授权等业务实现,是shiro的绝对核心,用来管理组件
Authenticator: 认证管理器,负责认证操作
Authorizer: 授权管理器,负责授权检测
SessionManager: 会话管理器,负责创建用户session,以及管理session生命周期
SessionDao: SessionManager对象执行的操作进行持久化
CacheManager: 缓存管理器,提供创建缓存的实例,维护缓存的生命周期
Cryptography: 加密管理器,提供了一些加密方式
Shiro框架认证拦截实现
1. 添加依赖
2. Shiro核心对象的配置:
2.1 创建SpringShiroConfig类,为shiro添加配置
2.2 在SpringShiroConfig类中添加一个securityManager对象的配置
2.3在shiro配置类中添加ShiroFilterFactoryBean对象的配置,可以通过此对象设置匿名访问的资源,认证访问的资源
Shiro框架认证业务实现
身份认证判断用户是否为系统的合法用户,用户访问系统资源的认证(对用户身份信息的认证)
其中认证流程如下:
1. 系统调用subject的login方法将用户信息提交给securityManager
2. securityManager会将认证操作委托给认证管理器Authenticator
3. Authenticator将用户输入的身份信息传递给realm对象
4. realm对象访问数据库层获取用户信息然后对信息进行封装并且返回
5. Authenticator对realm对象的返回信息进行身份认证
realm==>SysUserRealm
SysUserRealm.java
SysUserRealm.java
SysUserController.java
GlobalExceptionHandler.java
Shiro 中授权过程的实现
判断用户是否允许访问某一个资源
授权流程:
1. 系统调用subject的相关方法提交用户信息给securityManager
2. securityManager将授权操作委托给authorizer授权管理器对象
3. authorizer将用户的权限信息传给realm
4. realm去访问数据层获取用户信息,再将信息进行比对
5. authorizer对返回的realm对象返回的信息进行对比
原理:
授权底层是用到了AOP,而且是原生的AOP
访问(调用)某一个方法的时候,判断有没有调用这个方法的权限
授权访问,授权方法是一个切入点方法,增强的业务判断有没有调用这个方法的权限
访问某一个方法所需要的权限交给securityManager
组件authorizer去校验你这个用户到底有没有访问这个方法的权限
Subject提交的是访问这个方法需要什么权限
Realm对象去查询用户有什么权限 是否包含访问这个方法所需要的权限
如果包含则授权访问,否则抛异常
授权业务DAO实现
实现方法1:进行多次单表查询(下面是示例)
实现方法2:多表联合查询
1. 基于登录用户id查询对应的角色ID(SysUserRoleDao)
2. 再基于查询出来的角色ID找到相应的菜单ID (SysRoleMenuDao)
3. 再基于查询出来的菜单ID查询权限标识 (SysMenuDao)
realm==>ShiroUseRealm
ShiroUseRealm.java
service==>impl==>SysLogServiceImpl
作者:羽猫君 https://www.bilibili.com/read/cv19157824 出处:bilibili