目录

背景

1.使用

1.1 配置插件

1.2 使用


      最近在公司做项目时候需要实现数据权限最终方案就是根据借助mybatisplus插件拦截sql并解析规则拼接实现数据权限拦截记录一下。

 @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

        // 添加数据权限插件
        DataPermissionInterceptor dataPermissionInterceptor = new DataPermissionInterceptor();
        // 添加自定义数据权限处理器
        dataPermissionInterceptor.setDataPermissionHandler(dataScopePermissionHandler);
        interceptor.addInnerInterceptor(dataPermissionInterceptor);

        //分页拦截器
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
public class DataScopePermissionHandler implements DataPermissionHandler {

    @Override
    public Expression getSqlSegment(Expression where, String mappedStatementId) {
        // 根据自己业务拦截数据权限
        return where ;
    }
Page<DTO> page = xxxapper.selectPage(new Page(query.getPageNo(), query.getPageSize()), queryWrapper);

2.1.1 @MapperScan扫描

2.1.2 MapperScannerRegistrar注册信息

2.1.3 MapperScannerConfigurer后置处理器PostProcessor

2.1.4 ClassPathMapperScanner根据mapper路径注册bean定义信息

2.1.5 MapperFactoryBean创建代理对象mapper

2.2.1 MybatisPlusAutoConfiguration实例

2.2.2 FactoryBean后置处理器

2.2.3 InterceptorChain拦截器设置

2.3.1 请求信息

2.3.2 代理对象请求

2.3.3 创建sqlsession执行查询

2.3.4 创建sqlsession里面的执行器

2.3.5 创建sqlsession里面的执行

2.4.1 MybatisPlusInterceptor拦截查询

2.4.2 DataPermissionInterceptor拦截查询

2.4.3 DataPermissionHandler自定义执行器前置过滤

2.4.5 自定义拦截sql后,执行sql,处理完成

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注