zoukankan      html  css  js  c++  java
  • SpringBoot aop 注解 数据权限校验

    注解类:

    @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<? extends Mapper> 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<String, Object> payloadMap = (Map<String, Object>) 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();
                    }
                }
            }
        }
    }

    使用:

  • 相关阅读:
    再也不用为word 中表达式的上标和下标发愁了
    创建链接
    ps钢笔工具隐藏的知识。
    学Ps个人遇到的小细节
    新手琢磨ps,学问深着呢。。
    数据库2012终于知道数据库攻击注入参数
    想脱离鼠标,不想要鼠标就只想用键盘完成所有编程,你说可能吗?
    vs2013中的快捷键
    如何在C/C++中动态分配二维数组【转载】
    转载:C++的那些事:表达式与语句
  • 原文地址:https://www.cnblogs.com/shuaixianbohou/p/10711042.html
Copyright © 2011-2022 走看看