问题情境:
在web系统对应的后台查询方法中,有一些鉴权问题的处理,每次都要根据当前登陆用户来获取权限对应的数据库字段,每次都要写一堆代码,感觉封装的话每次的使用的参数也不太一致,于是想到用aop的形式进行处理,主要对切面方法的请求参数进行处理。
解决方案:
代码如下:
@Before(value = "pointCut()")
public void queryAreaIds(JoinPoint joinPoint) {
Object param = joinPoint.getArgs()[0];
try {
//获取object中的data属性
Field field = param.getClass().getDeclaredField("areaId");
field.setAccessible(true);//设置data属性为可访问的
String aredId =(String)field.get(param);
List<String> roleAreaIds = getRoleAreaIds(aredId);
Field areaIdsField = param.getClass().getDeclaredField("areaIds");
areaIdsField.setAccessible(true);//设置data属性为可访问的
if(roleAreaIds!=null){
areaIdsField.set(param, roleAreaIds);
}
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
}
解决思路:
因为请求的参数不同的方法的参数不一致,但某些属性是一致的,于是通过反射的形式获取参数字段,并对某些字段赋值。