houzhongjian
2024-07-23 a6de490948278991e47952e90671ddba4555e9a2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
///**
// * Copyright (c) 2018 人人开源 All rights reserved.
// *
// * https://www.renren.io
// *
// * 版权所有,侵权必究!
// */
//
//package com.iailab.common.interceptor;
//
//import cn.hutool.core.util.StrUtil;
//import com.baomidou.mybatisplus.core.toolkit.PluginUtils;
//import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
//import net.sf.jsqlparser.JSQLParserException;
//import net.sf.jsqlparser.expression.Expression;
//import net.sf.jsqlparser.expression.StringValue;
//import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
//import net.sf.jsqlparser.parser.CCJSqlParserUtil;
//import net.sf.jsqlparser.statement.select.PlainSelect;
//import net.sf.jsqlparser.statement.select.Select;
//import org.apache.ibatis.executor.Executor;
//import org.apache.ibatis.mapping.BoundSql;
//import org.apache.ibatis.mapping.MappedStatement;
//import org.apache.ibatis.session.ResultHandler;
//import org.apache.ibatis.session.RowBounds;
//
//import java.util.Map;
//
///**
// * 数据过滤
// *
// * @author Mark sunlightcs@gmail.com
// */
//public class DataFilterInterceptor implements InnerInterceptor {
//
//    @Override
//    public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) {
//        DataScope scope = getDataScope(parameter);
//        // 不进行数据过滤
//        if(scope == null || StrUtil.isBlank(scope.getSqlFilter())){
//            return;
//        }
//
//        // 拼接新SQL
//        String buildSql = getSelect(boundSql.getSql(), scope);
//
//        // 重写SQL
//        PluginUtils.mpBoundSql(boundSql).sql(buildSql);
//    }
//
//    private DataScope getDataScope(Object parameter){
//        if (parameter == null){
//            return null;
//        }
//
//        // 判断参数里是否有DataScope对象
//        if (parameter instanceof Map) {
//            Map<?, ?> parameterMap = (Map<?, ?>) parameter;
//            for (Map.Entry entry : parameterMap.entrySet()) {
//                if (entry.getValue() != null && entry.getValue() instanceof DataScope) {
//                    return (DataScope) entry.getValue();
//                }
//            }
//        } else if (parameter instanceof DataScope) {
//            return (DataScope) parameter;
//        }
//
//        return null;
//    }
//
//    private String getSelect(String buildSql, DataScope scope){
//        try {
//            Select select = (Select) CCJSqlParserUtil.parse(buildSql);
//            PlainSelect plainSelect = (PlainSelect) select.getSelectBody();
//
//            Expression expression = plainSelect.getWhere();
//            if(expression == null){
//                plainSelect.setWhere(new StringValue(scope.getSqlFilter()));
//            }else{
//                AndExpression andExpression =  new AndExpression(expression, new StringValue(scope.getSqlFilter()));
//                plainSelect.setWhere(andExpression);
//            }
//
//            return select.toString().replaceAll("'", "");
//        }catch (JSQLParserException e){
//            return buildSql;
//        }
//    }
//}