逻辑图
- 权限表结构
权限实体类结构
自定义注解
- 为了后面封装数据存到数据库权限表中
使用自定义注解演示
- @RequiredPermission自定义注解直接贴方法上即可
权限的mapper部分
- 功能使用到的2条sql语句
权限业务层实现类加载方法部分(重点)
- 获取所有控制器上的方法,获取方法上有贴自定义注解@RequiredPermission的注解,并将注解上的值存放进权限实体类中后存放进数据库权限表里,若数据库已存此权限注解表达式 则不存,避免数据库数据重复!
@Autowired
private PermissionMapper permissionMapper;
@Autowired
private RequestMappingHandlerMapping handlerMapping;//爆红没关系,问题不大
@Override
public void reload() {
List<String> expressions = permissionMapper.selectAllExpression();// 查询所有的权限表达式
// 直接通过springmvc收集映射方法信息来获取我们每个方法
Map<RequestMappingInfo, HandlerMethod> handlerMethods = handlerMapping.getHandlerMethods();
System.out.println(handlerMethods);
Collection<HandlerMethod> handlermethods = handlerMethods.values();
for (HandlerMethod method : handlermethods) {
RequiredPermission methodAnnotation = method.getMethodAnnotation(RequiredPermission.class);
if (methodAnnotation==null){
continue;
}
// 从注解中获取权限名称和权限表达式
String expression = methodAnnotation.expression();
String name = methodAnnotation.name();
// 判断数据库是否已经存在该权限表达式
if (expressions.contains(expression)){
continue;//若存在 则跳过
}
// 把数据封装成权限对象
Permission permission = new Permission();
permission.setExpression(expression);
permission.setName(name);
permissionMapper.insert(permission); //存放进数据库里
expressions.add(expression); //此部分正在遍历,放进数据库后再放进集合里,避免遍历混乱
}
}
控制器层
- 定义一个JsonReult类 作为json对象传给前端
- 控制器层部分,调用业务层方法 操作加载完成后 返回json数据给前端
效果图
- 点击按钮 则发送请求进控制器进行加载操作,后面就可以把权限表数据展示出来了!