可商业权限管理系统:
1.数据结构
Set<Permission> savedPermissions = new LinkedHashSet<>();
LinkedHashSet:不可重复,有序
2.权限管理
@RequestMapping("/load")
@ResponseBody
//不用流的方式
public JsonResult load() {
List<Permission> permissions = permissionService.listAll();
Set<Permission> savedPermissions = new LinkedHashSet<>();
try {
//1.通过应用程序上下文容器获取所有控制器注解的字节码
Map<String, Object> beans = ctx.getBeansWithAnnotation(Controller.class);
//2.获取注解的值
Collection<Object> coo = beans.values();
for (Object co : coo) {
//3.遍历注解中的方法
for (Method method : co.getClass().getDeclaredMethods()) {
//4.获取想要注解的注解
requiredPermission annotation = method.getAnnotation(requiredPermission.class);
//5.判断,执行业务
if (annotation != null) {
String name = annotation.name();
String expression = annotation.expression();
Permission permission = new Permission();
permission.setName(name);
permission.setExpression(expression);
if (!permissions.contains(permission)) {
savedPermissions.add(permission);
}
}
}
}
permissionService.batchSave(savedPermissions);
} catch (Exception e) {
return new JsonResult(false, "加载失败");
}
return new JsonResult(true, "加载成功");
}
//用流的方式
@RequestMapping("/load")
@ResponseBody
public JsonResult load() {
List<Permission> permissions = permissionService.listAll();
try {
//获取带注解的bean对象的值并且转成流的形式
Set<Permission> savedPermissions = ctx.getBeansWithAnnotation(Controller.class).values().stream()
.flatMap(controller -> Arrays.stream(controller.getClass().getDeclaredMethods()))
//过滤
.filter(method -> method.getAnnotation(requiredPermission.class) != null)
//转形式(对象)
.map(method -> new Permission(method.getAnnotation(requiredPermission.class).name(), method.getAnnotation(requiredPermission.class).expression()))
//过滤数据库有的数据
.filter(permission -> !permissions.contains(permission))
//转成set
.collect(Collectors.toSet());
if (savedPermissions.size() > 0) {
permissionService.batchSave(savedPermissions);
}
} catch (Exception e) {
return new JsonResult(false, "加载失败");
}
return new JsonResult(true, "加载成功");
}
3.maven中sql循环写法:
<insert id="batchInsert">
insert into permission (name, expression) values
<foreach collection="savePermissions" item="p" separator=","> // collection:参数名 item:别名 separator:fen'ge
(#{p.name},#{p.expression})
</foreach>
</insert>
4.新的 A P I:
Array.Stream()返回的是一个元素序列,且支持顺序和并行的聚合操作。其实我们可以把它理解为包装类
原文地址:https://www.jb51.cc/wenti/3287883.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。