利用注解进行权限控制:
if (StringUtils.isNotBlank(sqlString.toString()))
{
Object params = joinPoint.getArgs()[0];
if (StringUtils.isNotNull(params) && params instanceof BaseEntity)
{
BaseEntity baseEntity = (BaseEntity) params;
baseEntity.getParams().put(DATA_SCOPE, " AND (" + sqlString.substring(4) + ")");
}
}
在这段代码中,joinPoint.getArgs()[0]
表示获取到执行的语句的第一个参数。由于该参数是一个对象,因此需要进行类型转换才能使用。
在判断条件if (StringUtils.isNotNull(params) && params instanceof BaseEntity)
中,使用了instanceof
关键字来判断params
是否为BaseEntity
类型的对象。如果满足条件,则将params
强制转换为BaseEntity
类型,并将其赋值给变量baseEntity
。
接下来,通过调用baseEntity.getParams()
方法获取到baseEntity
对象中的参数集合,并将权限控制相关的数据添加到该集合中。具体来说,将字符串" AND (" + sqlString.substring(4) + ")"作为键值对添加到集合中,其中" AND (" + sqlString.substring(4) + ")"表示权限控制相关的SQL片段。
需要注意的是,这里的sqlString
是一个拼接好的SQL语句,其中的" AND (" + sqlString.substring(4) + ")"部分是根据权限点动态生成的。
定义在切面的断点无法进入:
在切面中,如果断点无法进入,可能有以下几种原因:
-
切点配置不正确。请检查切点的表达式是否正确,以及是否包含了需要拦截的方法。
-
方法上的注解或参数类型不匹配。请检查方法上的注解或参数类型是否与切面的定义相匹配。
-
切面执行顺序问题。如果有多个切面同时执行,可能会导致某些切面无法执行。请检查切面的执行顺序是否正确。
-
异常处理问题。如果方法抛出了异常,并且没有被捕获处理,那么切面也无法执行。请检查方法中的异常处理逻辑是否正确。