Commit 0ca247b8 authored by chenzhao's avatar chenzhao

修改拦截器 兼容分页插件

parent 9685838f
...@@ -46,15 +46,30 @@ public class UserEmpowerInterceptor implements Interceptor { ...@@ -46,15 +46,30 @@ public class UserEmpowerInterceptor implements Interceptor {
try { try {
if (null == redisUtils ){
return invocation.proceed();
}
StdUserEmpower orgCode =(StdUserEmpower) redisUtils.get("Emp_"+RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())); StdUserEmpower orgCode =(StdUserEmpower) redisUtils.get("Emp_"+RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken()));
if(orgCode!=null&& orgCode.isFlag()&&!orgCode.isFarmer()){ if(orgCode!=null&& orgCode.isFlag()&&!orgCode.isFarmer()){
StatementHandler statementHandler = PluginUtils.realTarget(invocation.getTarget()); StatementHandler statementHandler = PluginUtils.realTarget(invocation.getTarget());
MetaObject metaObject = SystemMetaObject.forObject(statementHandler); MetaObject metaObject = SystemMetaObject.forObject(statementHandler);
MappedStatement mappedStatement = (MappedStatement) metaObject.getValue("delegate.mappedStatement"); MappedStatement mappedStatement = (MappedStatement) metaObject.getValue("delegate.mappedStatement");
//获取方法注解 //获取方法注解
Method method = getTargetDataAuthMethod(mappedStatement); // Method method = getTargetDataAuthMethod(mappedStatement);
UserEmpower userEmpower = getTargetDataAuthAnnotation(mappedStatement); UserEmpower userEmpower;
if (mappedStatement.getId().contains("_COUNT")){
String id = mappedStatement.getId().replace("_COUNT", "");
userEmpower = getTargetDataAuthAnnotationCount(id);
if (userEmpower == null) {
return invocation.proceed();
}
}else {
userEmpower = getTargetDataAuthAnnotation(mappedStatement);
}
if(userEmpower==null){ if(userEmpower==null){
return invocation.proceed(); return invocation.proceed();
} }
...@@ -125,11 +140,22 @@ public class UserEmpowerInterceptor implements Interceptor { ...@@ -125,11 +140,22 @@ public class UserEmpowerInterceptor implements Interceptor {
MetaObject metaObject = SystemMetaObject.forObject(statementHandler); MetaObject metaObject = SystemMetaObject.forObject(statementHandler);
MappedStatement mappedStatement = (MappedStatement) metaObject.getValue("delegate.mappedStatement"); MappedStatement mappedStatement = (MappedStatement) metaObject.getValue("delegate.mappedStatement");
//获取方法注解 //获取方法注解
Method method = getTargetDataAuthMethod(mappedStatement); BoundSql boundSql = (BoundSql) metaObject.getValue("delegate.boundSql");
UserEmpower userEmpower = getTargetDataAuthAnnotation(mappedStatement); String sql = boundSql.getSql();
if (userEmpower == null) { UserEmpower userEmpower ;
return invocation.proceed(); if (mappedStatement.getId().contains("_COUNT")){
String id = mappedStatement.getId().replace("_COUNT", "");
userEmpower = getTargetDataAuthAnnotationCount(id);
if (userEmpower == null) {
return invocation.proceed();
}
}else {
userEmpower = getTargetDataAuthAnnotation(mappedStatement);
if (userEmpower == null) {
return invocation.proceed();
}
} }
//获取字段 //获取字段
String[] filed = userEmpower.dealerField(); String[] filed = userEmpower.dealerField();
//获取字段条件表达式 //获取字段条件表达式
...@@ -141,10 +167,11 @@ public class UserEmpowerInterceptor implements Interceptor { ...@@ -141,10 +167,11 @@ public class UserEmpowerInterceptor implements Interceptor {
List<String> list = new ArrayList<>(Arrays.asList(data)); List<String> list = new ArrayList<>(Arrays.asList(data));
list.removeAll(Collections.singleton(null)); list.removeAll(Collections.singleton(null));
BoundSql boundSql = (BoundSql) metaObject.getValue("delegate.boundSql");
List<String> sq ; List<String> sq ;
//获取sql //获取sql
String sql = boundSql.getSql();
List<String> fileds = Arrays.asList(filed); List<String> fileds = Arrays.asList(filed);
if (!ValidationUtil.isEmpty(dataAuthRule.getAdminRegionalCompaniesCode())) { if (!ValidationUtil.isEmpty(dataAuthRule.getAdminRegionalCompaniesCode())) {
sq = selectSqlJXS(new String[]{fileds.get(0), fileds.get(1)}, fileCondition, list); sq = selectSqlJXS(new String[]{fileds.get(0), fileds.get(1)}, fileCondition, list);
...@@ -508,6 +535,20 @@ public class UserEmpowerInterceptor implements Interceptor { ...@@ -508,6 +535,20 @@ public class UserEmpowerInterceptor implements Interceptor {
return null; return null;
} }
private Method getTargetDataAuthMethodCount(String id) throws ClassNotFoundException {
String className = id.substring(0, id.lastIndexOf("."));
String methodName = id.substring(id.lastIndexOf(".") + 1);
final Class<?> cls = Class.forName(className);
final Method[] methods = cls.getMethods();
for (Method method : methods) {
// TODO 后续重载方法需要优化
if (method.getName().equals(methodName) && method.isAnnotationPresent(UserEmpower.class)) {
return method;
}
}
return null;
}
/** /**
* 获取当前执行语句对应mapper方法的DataAuth注解 * 获取当前执行语句对应mapper方法的DataAuth注解
* *
...@@ -535,6 +576,10 @@ public class UserEmpowerInterceptor implements Interceptor { ...@@ -535,6 +576,10 @@ public class UserEmpowerInterceptor implements Interceptor {
return sql; return sql;
} }
private UserEmpower getTargetDataAuthAnnotationCount(String id) throws ClassNotFoundException {
return getTargetDataAuthMethodCount(id).getAnnotation(UserEmpower.class);
}
...@@ -557,7 +602,11 @@ public class UserEmpowerInterceptor implements Interceptor { ...@@ -557,7 +602,11 @@ public class UserEmpowerInterceptor implements Interceptor {
return sql; return sql;
} }
private boolean isCountQuery(String sql) {
// 判断 SQL 是否为 COUNT 查询
boolean flag = sql.startsWith("SELECT count(");
return flag;
}
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment