package com.ls.service.Impl;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
import com.ls.dao.SysAclMapper;
import com.ls.dao.SysAclModuleMapper;
import com.ls.dao.SysDeptMapper;
import com.ls.dto.AclDto;
import com.ls.dto.AclModuleLevelDto;
import com.ls.dto.DeptLevelDto;
import com.ls.model.SysAcl;
import com.ls.model.SysAclModule;
import com.ls.model.SysDept;
import com.ls.service.SysTreeService;
import com.ls.service.SysCoreService;
import com.ls.util.LevelUtil;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
/**
* 〈树逻辑实现类〉
*
* @author Administrator
* @create 2017/12/4
* @since 1.0.0
*/
@Service
public class SysTreeServiceImpl implements SysTreeService{
private static Logger log = LoggerFactory.getLogger(SysTreeServiceImpl.class);
@Resource
private SysDeptMapper sysDeptMapper;
@Resource
private SysAclModuleMapper sysAclModuleMapper;
@Resource
private SysCoreService SysCoreService;
@Resource
private SysAclMapper sysAclMapper;
/**
* 单位树
* @return
*/
public List<DeptLevelDto> deptTree(){
//获取所有单位
List<SysDept> deptList = sysDeptMapper.getAllDept();
List<DeptLevelDto> dtoList = Lists.newArrayList();
for (SysDept dept : deptList){
//把dept相同key的value拷贝到dto中
DeptLevelDto dto = DeptLevelDto.adapt(dept);
dtoList.add(dto);
}
return deptLevelDtoListToTree(dtoList);
}
/**
* 把单位List转换成树结构
* @param deptLevelDtoList
* @return
*/
public List<DeptLevelDto> deptLevelDtoListToTree( List<DeptLevelDto> deptLevelDtoList){
if(CollectionUtils.isEmpty(deptLevelDtoList)){
//返回空的List
return Lists.newArrayList();
}
/**
* multimap允许重复元素,map不允许有重复,相当于Map<String, List<Object>>
*/
//key -> value
// level -> [dept1, dept2, dept3, ...]
Multimap<String, DeptLevelDto> levelDeptMap = ArrayListMultimap.create();
List<DeptLevelDto> rootList = Lists.newArrayList();
//
for(DeptLevelDto dto : deptLevelDtoList){
levelDeptMap.put(dto.getLevel(),dto);
if(LevelUtil.ROOT.equals(dto.getLevel())){
//顶级根层级
rootList.add(dto);
}
}
//根层级rootList 按照seq从小到大排序
//Comparator 比较器
Collections.sort(rootList, deptLevelDtoComparator);
// Collections.sort(rootList, new Comparator<DeptLevelDto>() {
// public int compare(DeptLevelDto o1, DeptLevelDto o2) {
// //优先
// return o1.getSeq() - o2.getSeq();
// }
// });
log.info("transforDeptTree before:" + rootList.toString());
//递归生成树------所有单位,根层级,Multimap --对deptLevelDtoList进行排序
transforDeptTree(deptLevelDtoList, LevelUtil.ROOT, levelDeptMap);
log.info("transforDeptTree after:" + rootList.toString());
return rootList;
}
//单位递归排序生成树
public void transforDeptTree( List<DeptLevelDto> deptLevelDtoList, String level, Multimap<String, DeptLevelDto> levelDeptMap){
log.info("Multimap : "+ levelDeptMap.toString());
for (int i = 0; i < deptLevelDtoList.size(); i++) {
//遍历该层级的每个元素
DeptLevelDto deptLevelDto = deptLevelDtoList.get(i);
//处理当前层级的数据
String nextLevel = LevelUtil.calculateLevel(level,deptLevelDto.getId());
//处理下一层
List<DeptLevelDto> tempdeptLevelDtoList = (List<DeptLevelDto>) levelDeptMap.get(nextLevel);
if(CollectionUtils.isNotEmpty(tempdeptLevelDtoList)){
//排序
Collections.sort(tempdeptLevelDtoList, deptLevelDtoComparator);
//设置下一个单位
deptLevelDto.setDeptList(tempdeptLevelDtoList);
//进入到下一层处理
transforDeptTree(tempdeptLevelDtoList,nextLevel,levelDeptMap);
}
}
}
/**
* DeptLevelDto比较器
*/
public Comparator<DeptLevelDto> deptLevelDtoComparator = new Comparator<DeptLevelDto>() {
public int compare(DeptLevelDto o1, DeptLevelDto o2) {
return o1.getSeq() - o2.getSeq();
}
};
/**
* 权限模块
* @param dtoList
* @return
*/
public List<AclModuleLevelDto> aclModuleListToTree(List<AclModuleLevelDto> dtoList) {
if (CollectionUtils.isEmpty(dtoList)) {
return Lists.newArrayList();
}
// level -> [aclmodule1, aclmodule2, ...] Map<String, List<Object>>
Multimap<String, AclModuleLevelDto> levelAclModuleMap = ArrayListMultimap.create();
List<AclModuleLevelDto> rootList = Lists.newArrayList();
for (AclModuleLevelDto dto : dtoList) {
levelAclModuleMap.put(dto.getLevel(), dto);
if (LevelUtil.ROOT.equals(dto.getLevel())) {
rootList.add(dto);
}
}
Collections.sort(rootList, aclModuleSeqComparator);
transformAclModuleTree(rootList, LevelUtil.ROOT, levelAclModuleMap);
return rootList;
}
/**
* 权限模块排序
* @param dtoList
* @param level
* @param levelAclModuleMap
*/
public void transformAclModuleTree(List<AclModuleLevelDto> dtoList, String level, Multimap<String, AclModuleLevelDto> levelAclModuleMap) {
for (int i = 0; i < dtoList.size(); i++) {
AclModuleLevelDto dto = dtoList.get(i);
String nextLevel = LevelUtil.calculateLevel(level, dto.getId());
List<AclModuleLevelDto> tempList = (List<AclModuleLevelDto>) levelAclModuleMap.get(nextLevel);
if (CollectionUtils.isNotEmpty(tempList)) {
Collections.sort(tempList, aclModuleSeqComparator);
dto.setAclModuleList(tempList);
transformAclModuleTree(tempList, nextLevel, levelAclModuleMap);
}
}
}
/**
* 权限模块比较器
*/
public Comparator<AclModuleLevelDto> aclModuleSeqComparator = new Comparator<AclModuleLevelDto>() {
public int compare(AclModuleLevelDto o1, AclModuleLevelDto o2) {
return o1.getSeq() - o2.getSeq();
}
};
/**
*
* @return
*/
public List<AclModuleLevelDto> aclModuleTree() {
List<SysAclModule> aclModuleList = sysAclModuleMapper.getAllAclModule();
List<AclModuleLevelDto> dtoList = Lists.newArrayList();
for (SysAclModule aclModule : aclModuleList) {
dtoList.add(AclModuleLevelDto.adapt(aclModule));
}
return aclModuleListToTree(dtoList);
}
/**
* 权限点
* @return
*/
public List<AclModuleLevelDto> roleTree(int roleId) {
// 1、当前用户已分配的权限点
List<SysAcl> userAclList = SysCoreService.getCurrentUserAclList();
// 2、当前角色分配的权限点
List<SysAcl> roleAclList = SysCoreService.getRoleAclList(roleId);
// 3、当前系统所有权限点
List<AclDto> aclDtoList = Lists.newArrayList();
//jdk1.8
Set<Integer> userAclIdSet = user
没有合适的资源?快使用搜索试试~ 我知道了~
(学习权限管理经典作品)java权限管理系统,三个项目SpringSecurity + shiro + Filter自实现
共948个文件
xml:231个
class:206个
js:138个
1星 需积分: 17 21 下载量 15 浏览量
2017-12-10
14:49:52
上传
评论 1
收藏 20.98MB ZIP 举报
温馨提示
用Idea手写的三个项目,其中Filter实现的权限管理系统使用了SSM框架+Redis+java8的一些特性,前端使用的是基于bootstrap 的ACE admin模板 和ZTree插件等等,代码非常规范,有完整的注释,很适合学习SpringSecurity 和 shiro 的同学,良心出品。
资源推荐
资源详情
资源评论
收起资源包目录
(学习权限管理经典作品)java权限管理系统,三个项目SpringSecurity + shiro + Filter自实现 (948个子文件)
SysTreeServiceImpl.class 10KB
SysTreeServiceImpl.class 10KB
SysRoleController.class 6KB
SysRoleController.class 6KB
SysCoreServiceImpl.class 6KB
SysCoreServiceImpl.class 6KB
SysAclModuleServiceImpl.class 6KB
SysAclModuleServiceImpl.class 6KB
AclControlFilter.class 5KB
AclControlFilter.class 5KB
SysAcl.class 5KB
SysAcl.class 5KB
SysDeptServiceImpl.class 5KB
SysDeptServiceImpl.class 5KB
SysUserServiceIpml.class 5KB
SysUserServiceIpml.class 5KB
SpringSecurityConfig.class 5KB
SysAclServiceImpl.class 5KB
SysAclServiceImpl.class 5KB
SysUser.class 4KB
SysUser.class 4KB
ShiroConfiguration.class 4KB
SysAclModule.class 4KB
SysAclModule.class 4KB
AuthRealm.class 4KB
SysCacheServiceImpl.class 4KB
SysCacheServiceImpl.class 4KB
DruidConfiguration.class 4KB
IpUtil.class 4KB
IpUtil.class 4KB
SysDept.class 4KB
SysDept.class 4KB
SysRoleUserServiceImpl.class 4KB
SysRoleUserServiceImpl.class 4KB
BeanValidator.class 4KB
BeanValidator.class 4KB
ShiroConfiguration.class 4KB
JsonMapper.class 3KB
JsonMapper.class 3KB
SysRoleAclServiceImpl.class 3KB
SysRoleAclServiceImpl.class 3KB
AclParam.class 3KB
AclParam.class 3KB
AuthRealm.class 3KB
SysRoleServiceImpl.class 3KB
SysRoleServiceImpl.class 3KB
HttpInterceptor.class 3KB
HttpInterceptor.class 3KB
UserParam.class 3KB
UserParam.class 3KB
UserController.class 3KB
UserController.class 3KB
TestController.class 3KB
SysRole.class 3KB
SysRole.class 3KB
SysAcl$SysAclBuilder.class 3KB
SysAcl$SysAclBuilder.class 3KB
AclModuleParam.class 3KB
AclModuleParam.class 3KB
SysUser$SysUserBuilder.class 3KB
SysUser$SysUserBuilder.class 3KB
SysAclModule$SysAclModuleBuilder.class 3KB
SysAclModule$SysAclModuleBuilder.class 3KB
SysLog.class 2KB
SysLog.class 2KB
RoleParam.class 2KB
RoleParam.class 2KB
SpringExceptionResolver.class 2KB
SpringExceptionResolver.class 2KB
SysDept$SysDeptBuilder.class 2KB
SysDept$SysDeptBuilder.class 2KB
SysRoleUser.class 2KB
SysRoleUser.class 2KB
SysRoleAcl.class 2KB
SysRoleAcl.class 2KB
DeptParam.class 2KB
DeptParam.class 2KB
SysRole$SysRoleBuilder.class 2KB
SysRole$SysRoleBuilder.class 2KB
PassWordUtil.class 2KB
PassWordUtil.class 2KB
Role.class 2KB
SysAclContrnller.class 2KB
SysAclContrnller.class 2KB
SysAclModuleController.class 2KB
SysAclModuleController.class 2KB
JsonData.class 2KB
JsonData.class 2KB
LoginFilter.class 2KB
SearchLogDto.class 2KB
LoginFilter.class 2KB
SearchLogDto.class 2KB
SysLog$SysLogBuilder.class 2KB
SysLog$SysLogBuilder.class 2KB
Mail.class 2KB
Mail.class 2KB
StringUtil.class 2KB
StringUtil.class 2KB
SysRoleUser$SysRoleUserBuilder.class 2KB
SysRoleUser$SysRoleUserBuilder.class 2KB
共 948 条
- 1
- 2
- 3
- 4
- 5
- 6
- 10
资源评论
- yqhscsdn2017-12-21假的,根本运行不了灰客_ck2018-01-13你环境没配起来吧?这是我手写的源码。。。
灰客_ck
- 粉丝: 2
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功