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();
                    }
                }
            }
        }
    }

    使用:

  • 相关阅读:
    虚拟机安装Linux方案和操作系统启动流程
    CentOS7防止root密码被破解
    子网划分和VLAN
    Python之包的相关
    禁止复制文本的代码 HTML
    asp.net中Session过期设置方法
    CSS+DIV问题!DIV的最小高度问题!
    设置COOKIE过期时间的方法
    网站常见问题及解决方法(div/css)
    ASP.NET中如何删除最近打开的项目和文件的记录
  • 原文地址:https://www.cnblogs.com/shuaixianbohou/p/10711042.html
Copyright © 2011-2022 走看看