| | |
| | | ///** |
| | | // * Copyright (c) 2018 人人开源 All rights reserved. |
| | | // * |
| | | // * https://www.renren.io |
| | | // * |
| | | // * 版权所有,侵权必究! |
| | | // */ |
| | | // |
| | | //package com.iailab.module.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; |
| | | // } |
| | | // } |
| | | //} |
| | | package com.iailab.module.data.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; |
| | | } |
| | | } |
| | | } |