利用mybatis-plus内置拦截器实现权限处理

mybatis-plus的sql拦截器

参考文献​​​​​​SpringCloud或SpringBoot+Mybatis-Plus+ThreadLocal利用AOP+mybatis插件实现数据操作记录及更新对比_Tophua的博客-CSDN博客引文本文主要介绍如何使用Spring AOP + mybatis插件实现拦截数据库操作并根据不同需求进行数据对比分析,主要适用于系统中需要对数据操作进行记录、在更新数据时准确记录更新字段核心:ThreadLocal、AOP、mybatis插件(拦截器)、mybatis-Plus实体规范、数据对比实现思路使用注解DataLog标记需要记录操作日志的接口或方法进入Aop进行数据初始化,告知mybatis拦截器该线程操作需要记录操作记录,并使用ThreadLocal进行线程隔离,防止多线程操作时引发记https://blog.csdn.net/weixin_43833834/article/details/113173924?spm=1001.2014.3001.5502

mybatis-plus的核心处理类为mybatisplusinterceptor,这个类就是实现了mybatis的interceptor,将mybatis的四个拦截机制进行了不同程度的实现,本文将概述个人项目权限实现


提示:实现mybatis-plus的借口时会依据注入顺序处理,一般而言会在mybatis-plus拼接完所有sql后调用方法


前言

MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:

Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
ParameterHandler (getParameterObject, setParameters)
ResultSetHandler (handleResultSets, handleOutputParameters)
StatementHandler (prepare, parameterize, batch, update, query)
这些类中方法的细节可以通过查看每个方法的签名来发现,或者直接查看 MyBatis 发行包中的源代码。 如果你想做的不仅仅是监控方法的调用,那么你最好相当了解要重写的方法的行为。 因为如果在试图修改或重写已有方法的行为的时候,你很可能在破坏 MyBatis 的核心模块。 这些都是更低层的类和方法,所以使用插件的时候要特别当心


然而mybatis-plus则非常完美的实现了上述接口

一、基本权限设计

1.一个机构-多个角色-多个用户

2.一个页面(设置页面id)-多个功能-多个权限

3.用户在登入时选择登入角色,确定用户和角色关系,在访问页面时通过页面id获取页面对应必须需求权限,依据角色权限和页面权限进行校验

4.权限设计->权限可分为不同类型:数据字典类型,部门类型,固定值类型

4.1依据权限类型,在添加不同权限的时候设置监听字段,监听规则,例如字典类型,可以设置等于,包含,不等于,部门类型时则可以设置当前,所属下级,所属下级树等等

5.利用上述设计则可以实现

二、后台基本实现

1.第一步项目启动时给mybatis-plus的核心处理类MyBatisPlusInterceptor添加实现类

代码如下(示例):默认属性为interceptors 为所有的实现,在项目启动时获取到MyBatisPlusInterceptor的bean,然后注入自己的实现类

 

2.实现InnerInterceptor接口

在第一步注册时,我们默认将我们的实现接口放在了所有实现类之后,因此我们的实现类拦截到的sql为mybatis-plus处理完成以后的数据


3.增加处理机制 

因为我们实现的接口时mybatis-plus的,并且给MyBatisPlusInterceptor的interceptors添加了我们处理器,因此在每次执行sql的时候都会执行,因此我们需要区分执行sql是否需要加权限校验,我的设计思路为,为方法添加注解,当然也有其他的实现方法,我是在优化原有代码逻辑的基础上实现的

声明注解

 

在注解切面中,改变原有参数,并将生成的权限sql注入,提供固有标识,让我们自定义的sql改变mybatis-plus给我构造的sql,当然其中构建完成的sql可能会含有分页等等,我是在监听中,获取了 MyBatisPlusInterceptor执行当前执行了的实现类进行处理

总结

在这个实现过程中,权限的sql拼接我是在切面注解中我完成的,包括切面注解获取到的方法参数,因为是统一权限添加,因此代码规范显得尤为重要,例如我司项目返回值使用Map<String,Object>以及object,各种格式的返回值,这无疑是增加在sql的注入权限的难度

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值