业务应用接入

在该项目github主页\demo文件夹下存在一个示例应用,它引入并且使用MatrixAuth完成的权限判断。如有任何问题,可以参照该项目进行设置。

1 自由权限的验证

MatrixAuth使用@LocalPerm注解进行自由权限的验证工作。

@LocalPerm注解的使用示例如下:

@RequestMapping("/03")
@LocalPerm({"PM_02"})
public Result interface03(String value01, Integer value02) {
    return ResultUtil.getSuccessResult("Interface 02 operated successfully");
}

@LocalPerm注解能够将接口的信息传递给业务应用的MatrixAuthSetup接口的handleLocalPerm方法,由该方法判断操作是否可以执行。如果handleLocalPerm方法返回true,则操作被放行;如果handleLocalPerm方法返回false,则操作被拦截。

当该接口被调用时,handleLocalPerm方法将会被调用,且会收到如下的参数:

  • Method method:被调用的方法。
  • Object[] args:调用方法时传入的参数。
  • String[] permissionsInAnnotation:@LocalPerm注解中的字符串数组。
  • Set<String> permissionsUserOwned:当前操作用户的权限编码的集合。

\demo文件夹下的示例应用还给出了进行验权操作的其他信息。最终,handleLocalPerm方法通过返回值决定验权结果。

@Override
public Boolean handleLocalPerm(Method method, Object[] args, String[] permissionsInAnnotation, Set<String> permissionsUserOwned) {
    System.out.println("****************************************");
    System.out.println("Here you can make more detailed judgments with business information. \n" +
            "The information that may be needed in the judgment and how to obtain it are as follows:");
    System.out.println("****************************************");
    System.out.println("methodName:" + method.getName());
    System.out.println("methodClassName:" + method.getDeclaringClass().getName());
    System.out.println("methodArgTypes:");
    for (Parameter parameter : method.getParameters()) {
        System.out.println("--" + parameter.getType());
    }
    System.out.println("methodArgs:");
    for (Object parameter : args) {
        System.out.println("--" + parameter.toString());
    }
    System.out.println("annotationPermissions:");
    for (String perm : permissionsInAnnotation) {
        System.out.println("--" + perm);
    }
    System.out.println("ownedPermissions:" + permissionsUserOwned);
    System.out.println("****************************************");
    System.out.println("After the judgment, if it returns true, it means that the current method is allowed to be executed; \n" +
            "if it returns false, it means that it is refused to execute the current method.");
    System.out.println("****************************************");
    return true;
}

MatrixAuth——高性能轻量级分布式权限系统