安全框架·shiro

发布时间 2023-05-19 19:55:32作者: GaoYanbing

官网: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