博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot aop 注解 数据权限校验
阅读量:4453 次
发布时间:2019-06-07

本文共 2202 字,大约阅读时间需要 7 分钟。

注解类:

@Retention(RetentionPolicy.RUNTIME)public @interface DataAuthValid{        //位置    public int index() default 0;        //字段   id    //public String id() default "id";        //字段   id    public String orgId() default "org_id";        //mapper    @SuppressWarnings("rawtypes")    public Class
mapper();}

AOP切面:

@Aspect@Component@Order(1)public class DataAuthAop {     private static String types = "java.lang.String,java.lang.Long,long";        @Before("@annotation(dataAuth)")    public void beforeMethod(JoinPoint point,DataAuthValid dataAuth) throws Exception {                HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();        Map
payloadMap = (Map
) request.getAttribute("payloadMap"); Long companyid = Long.parseLong(payloadMap.get("companyid")+""); if(companyid != 1) { Object[] args = point.getArgs(); Object obj = args[dataAuth.index()]; String ids = null; String typeName = obj.getClass().getTypeName(); if(types.contains(typeName)) { ids = obj + ""; }else { Field[] fields = obj.getClass().getDeclaredFields(); for (Field f : fields) { f.setAccessible(true); if("id".equals(f.getName())) { Long id = (Long) f.get(obj); ids = id + ""; } } } String[] idArr = ids.split(","); for (String id : idArr) { Class cla = dataAuth.mapper(); Mapper mapper = (Mapper) SpringBeanFactoryUtils.getApplicationContext().getBean(cla); Object object = mapper.selectByPrimaryKey(Long.valueOf(id)); Field field = obj.getClass().getDeclaredField(dataAuth.orgId()); field.setAccessible(true); Long orgId = (Long)field.get(obj); if(!companyid.equals(orgId)) { throw new RuntimeException(); } } } }}

使用:

转载于:https://www.cnblogs.com/shuaixianbohou/p/10711042.html

你可能感兴趣的文章
python之Django学习笔记(一)---搭建Django开发环境和一些基本命令
查看>>
【搜索入门专题练习1】hdu1241+hdu1312 C+D【DFS】
查看>>
ADO 输入输出文本及获取指定字符串
查看>>
.Net MVC 前台验证跟后台验证
查看>>
scrollerview中使用viewpager嵌套fragmentment 滚动事件冲突解决
查看>>
maven 和 Maven的配置
查看>>
Jenkins配置备份恢复插件ThinBackup
查看>>
Dockerfile 构建前端node应用cnpm命令启动nodejs服务
查看>>
OpenWRT中的按键和灯的GPIO控制实现_转
查看>>
进度管理中的常见问题
查看>>
POJ 3083 -- Children of the Candy Corn(DFS+BFS)TLE
查看>>
linux运行级别
查看>>
工资调整
查看>>
记:Android 安装apk的代码实现
查看>>
xml弹出框js备份
查看>>
省份二级联动
查看>>
使用Vue时localhost:8080中localhost换成ip地址后无法显示页面的问题
查看>>
PHP 【五】
查看>>
HDU 1241 Oil Deposits
查看>>
POJ 2392 Space Elevator
查看>>