在该项目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;
}