一、项目运行 环境配置: Jdk1。8Tomcat8。5mysqlEclispe(IntelliJIDEA,Eclispe,MyEclispe,Sts都支持) 项目技术: JSPSpringSpringMVCMyBatishtmlcssJavaScriptJQueryAjaxlayuimaven等等 用户管理控制层:authoryyControllerRequestMapping(user)publicclassUserControllerextendsBaseController{privateSAutowiredIUserServiceiUserSAutowiredIRoleServiceiRoleSAutowiredIDeptServiceiDeptSAutowiredIPositionServiceiPositionSAutowiredprivateSysPasswordServicepasswordS描述跳转到用户页面date201891610:54RequestMapping(tolist)RequiresPermissions(user:list)publicStringtoUserList(){}描述用户数据date201891512:30RequestMapping(tableList)ResponseBodypublicTableDataInfolist(Useruser){startPage();ListUserusersiUserService。selectByUser(user);returngetDataTable(users);}编辑用户systemuseredit201809141RequiresPermissions(user:update)RequestMapping(edit{userId})publicStringedit(PathVariable(userId)StringuserId,Modelmodel){个人信息UseruseriUserService。selectByPrimaryKey(userId);MapString,ObjectrolepostdeptgetRolePostDept();model。addAttribute(depts,rolepostdept。get(dept));model。addAttribute(roles,rolepostdept。get(role));model。addAttribute(positions,rolepostdept。get(position));model。addAttribute(user,user);}描述保存用户date201891518:53PostMapping(editSave)RequiresPermissions(user:update)Operlog(modal用户管理,descr修改用户信息)ResponseBodypublicAjaxResultsave(Useruser){if(StringUtils。isNotNull(user。getUid())User。isBoss(user。getUid())){returnerror(不允许修改管理员用户);}if(user。getPwd()!null){user。setSalt(ShiroUtils。randomSalt());SimpleHashmd5newSimpleHash(MD5,user。getPwd(),user。getSalt(),1024);user。setPwd(md5。toHex());}returnresult(iUserService。updateByPrimaryKeySelective(user));}描述添加用户页面date201891518:46RequestMapping(toAdd)RequiresPermissions(user:add)publicStringtoaddUser(Modelmodel){MapString,ObjectrolepostdeptgetRolePostDept();model。addAttribute(depts,rolepostdept。get(dept));model。addAttribute(roles,rolepostdept。get(role));model。addAttribute(positions,rolepostdept。get(position));}描述添加用户date201891520:40RequestMapping(addSave)RequiresPermissions(user:add)Operlog(modal用户管理,descr添加用户)ResponseBodypublicAjaxResultaddUser(Useruser){user。setSalt(ShiroUtils。randomSalt());SimpleHashmd5newSimpleHash(MD5,user。getPwd(),user。getSalt(),1024);user。setPwd(md5。toHex());user。setAvatar(CsEnum。avatar。USERAVATAR。getValue());user。setCreateTime(newDate());returnresult(iUserService。insertSelective(user));}描述批量删除date20189169:31RequestMapping(del)RequiresPermissions(user:del)Operlog(modal用户模块,descr删除用户)ResponseBodypublicAjaxResultdelByUserIds(String〔〕ids){try{intiiUserService。deleteByPrimaryKeys(ids);}catch(Exceptione){returnerror(e。getMessage());}returnsuccess();}描述编辑密码修改页面date201891610:25RequestMapping(resetPwd{userId})RequiresPermissions(user:update)publicStringeditPwd(PathVariable(userId)Stringid,Modelmodel){model。addAttribute(uid,id);returnprefixresetP}描述密码修改date201891610:42RequestMapping(resetPwd)RequiresPermissions(user:update)Operlog(modal用户模块,descr修改密码)ResponseBodypublicAjaxResultresetPwd(Useruser){returnresult(iUserService。resrtPwd(user));}校验手机号码PostMapping(checkPhoneUnique)ResponseBodypublicStringcheckPhoneUnique(Useruser){StringuniqueFlag0;if(user!null){uniqueFlagiUserService。checkPhoneUnique(user);}returnuniqueF}校验email邮箱PostMapping(checkEmailUnique)ResponseBodypublicStringcheckEmailUnique(Useruser){StringuniqueFlag0;if(user!null){uniqueFlagiUserService。checkEmailUnique(user);}returnuniqueF}描述:校验登录名唯一性params:return:date:201810217:06PostMapping(checkLoginNameUnique)ResponseBodypublicStringcheckLoginNameUnique(Useruser){StringuniqueFlag0;if(user!null){uniqueFlagiUserService。checkLoginNameUnique(user);}returnuniqueF}publicMapString,ObjectgetRolePostDept(){MapString,ObjectmapnewHashMap();角色ListRolerolesiRoleService。selectRoleList(newRole());部门信息ListDeptdeptsiDeptService。selectDeptList(newDept());岗位ListPositionpositionsiPositionService。selectPositionList(newPosition());map。put(role,roles);map。put(dept,depts);map。put(position,positions);}用户个人信息查看页面RequestMapping(myMsg)publicStringToMyMsg(Modelmodel,HttpServletRequestrequest){UseruseriUserService。selectByPrimaryKey(getUserId());model。addAttribute(user,user);model。addAttribute(loginIp,HttpHeaderUtil。getIpAddr(request));}密码修改页面RequestMapping(resetMyPwd)publicStringtoResetPwd(Modelmodel){UseruseriUserService。selectByPrimaryKey(getUserId());model。addAttribute(user,user);returnprefixprofileresetP}密码修改保存RequestMapping(updateMyPwdSave)ResponseBodyRequiresPermissions(user:update)Operlog(modal个人信息,descr修改密码)publicAjaxResultupdateMyPwdSave(Stringpassword){UserusernewUser();user。setSalt(ShiroUtils。randomSalt());SimpleHashmd5newSimpleHash(MD5,password,user。getSalt(),1024);user。setPwd(md5。toHex());user。setUid(getUserId());intiiUserService。updateByPrimaryKeySelective(user);if(i0){更新shiro中的信息ShiroUtils。reloadUser(iUserService。selectByPrimaryKey(getUserId()));returnsuccess();}returnerror();}编辑用户头像修改RequestMapping(updateAvatar)publicStringtoupdateAvatar(Modelmodel){model。addAttribute(user,getUser());}修改保存用户头像RequestMapping(updateAvatarSave)RequiresPermissions(user:update)Operlog(modal个人信息,descr修改头像)ResponseBodypublicAjaxResulttoupdateAvatar(MultipartFilefile){try{StringimgPathUploadFile。uploadUserImg(file);if(StringUtils。isEmpty(imgPath)){returnerror(图片上传失败,稍后再试!);}UserusernewUser();user。setUid(getUserId());user。setAvatar(imgPath);intiiUserService。updateByPrimaryKeySelective(user);if(i0){ShiroUtils。reloadUser(iUserService。selectByPrimaryKey(getUserId()));}returnresult(i);}catch(IOExceptione){returnerror();}catch(FileSizeExceptione){文件过大returnerror(e。getMsg());}catch(FileNameLengthExceptione){文件名字超长returnerror(e。getMsg());}}校验密码和原来密码是否相同RequestMapping(checkPassword)ResponseBodypublicbooleancheckPassword(Stringpassword){加密后与数据库密码比较UserusergetUser();SimpleHashmd5newSimpleHash(MD5,password,user。getSalt(),1024);StringoldPasswordmd5。toHex();StringpwdgetPwd();if(pwd。equals(oldPassword)){}}}部门管理控制层:authoryyControllerRequestMapping(dept)publicclassDeptControllerextendsBaseController{privateSAutowiredIDeptServiceiDeptSAutowiredIUserServiceiUserS描述页面跳转到部门date201891610:59RequestMapping(tolist)RequiresPermissions(dept:list)publicStringtolist(){}描述ajax请求的所有部门date201891610:48RequestMapping(ajaxlist)ResponseBodypublicListDeptlist(Deptdept){ListDeptdeptsiDeptService。selectDeptList(dept);}描述部门列表页date201891610:52RequestMapping(tableList)ResponseBodypublicTableDataInfolistPag(Deptdept){开启分页startPage();ListDeptdeptsiDeptService。selectDeptList(dept);returngetDataTable(depts);}描述新增页面date201891611:37RequiresPermissions(dept:add)RequestMapping(toAdd)publicStringtoAdd(Modelmodel){ListUserusersiUserService。selectByUser(newUser());model。addAttribute(users,users);}描述:查询所有部门下的所有用户用户归类树状数据date:201892711:25RequestMapping(getDeptAndUserTreeData)ResponseBodypublicListObjectDeptAndUserTreeData(){ListDeptdeptsiDeptService。selectDeptAndUser();ListUserusersnewArrayList();LinkedListObjectdeptListnewLinkedList();for(Deptdept:depts){MapString,ObjectdeptMapnewHashMap();deptMap。put(name,dept。getDeptName());deptMap。put(id,null);usersdept。getUsers();LinkedListObjectuserlistnewLinkedList();for(Useruser:users){MapString,ObjectuserMapnewHashMap();userMap。put(name,user。getName());userMap。put(id,user。getUid());userMap。put(icon,imgtimg。jpg);userlist。add(userMap);}deptMap。put(children,userlist);deptList。add(deptMap);}returndeptL}描述批量删除date201891611:53RequestMapping(del)RequiresPermissions(dept:del)ResponseBodyOperlog(modal部门管理,descr删除部门)publicAjaxResultdel(String〔〕ids){try{iDeptService。deleteByPrimaryKeys(ids);}catch(Exceptione){returnerror(e。getMessage());}returnsuccess();}描述执行保存操作date201891611:54RequestMapping(addSave)Operlog(modal部门管理,descr添加部门)RequiresPermissions(dept:add)ResponseBodypublicAjaxResultaddDept(Deptdept){dept。setCreateTime(newDate());returnresult(iDeptService。insertSelective(dept));}描述编辑修改页面date201891614:06RequestMapping(edit{id})RequiresPermissions(dept:update)publicStringedit(PathVariable(id)Stringid,Modelmodel){DeptdeptiDeptService。selectByPrimaryKey(id);ListUserusersiUserService。selectByUser(newUser());model。addAttribute(users,users);model。addAttribute(Dept,dept);}描述修改保存date201891616:12RequestMapping(editSave)RequiresPermissions(dept:update)Operlog(modal部门管理,descr修改信息)ResponseBodypublicAjaxResultsave(Deptdept){inti0;try{iiDeptService。updateByPrimaryKeySelective(dept);}catch(Exceptione){returnerror(e。getMessage());}returnresult(i);}校验部门名称PostMapping(checkDeptNameUnique)ResponseBodypublicStringcheckDeptNameUnique(Deptdept){StringuniqueFlag0;if(dept!null){uniqueFlagiDeptService。checkDeptNameUnique(dept);}returnuniqueF}}角色管理控制层:authoryyControllerRequestMapping(role)publicclassRoleControllerextendsBaseController{privateSAutowiredIUserServiceiUserSAutowiredIRoleServiceiRoleSAutowiredIPermissionServiceiPermissionS描述页面跳转date201891610:59RequestMapping(tolist)RequiresPermissions(role:list)publicStringtolist(){}描述ajax请求所有date201891610:48RequestMapping(ajaxlist)ResponseBodypublicListRolelist(Rolerole){ListRolerolesiRoleService。selectRoleList(role);}描述列表date201891610:52RequestMapping(tableList)ResponseBodypublicTableDataInfolistPag(Rolerole){开启分页startPage();ListRolerolesiRoleService。selectRoleList(role);returngetDataTable(roles);}描述新增页面date201891611:37RequestMapping(toAdd)RequiresPermissions(role:add)publicStringtoAdd(Modelmodel){}描述批量删除date201891611:53RequestMapping(del)RequiresPermissions(role:del)Operlog(modal角色管理,descr删除角色)ResponseBodypublicAjaxResultdel(Integer〔〕ids){try{iRoleService。deleteByPrimaryKeys(ids);}catch(Exceptione){returnerror(e。getMessage());}returnsuccess();}描述添加保存date201891611:54RequestMapping(addSave)RequiresPermissions(role:update)Operlog(modal角色管理,descr添加角色)ResponseBodypublicAjaxResultaddRole(Rolerole,Integer〔〕ids){role。setCreateTime(newDate());intinsert0;try{if(StringUtils。isEmpty(ids)){idsnewInteger〔0〕;}insertiRoleService。insert(role,ids);}catch(Exceptione){returnerror(e。getMessage());}清空缓存ShiroUtils。clearCachedAuthorizationInfo();returnresult(insert);}描述:根据ID获取u他的所有权限做回显params:roleId角色Idreturn:date:201892714:04RequestMapping(selectById{roleId})ResponseBodypublicRoleselectById(PathVariable(roleId)IntegerroleId){RoleroleiRoleService。selectByPrimaryKey(roleId);}描述编辑修改页面date201891614:06RequestMapping(edit{id})RequiresPermissions(role:update)publicStringedit(PathVariable(id)Integerid,Modelmodel){RoleroleiRoleService。selectByPrimaryKey(id);model。addAttribute(Role,role);}描述编辑修改权限页面date201891614:06RequestMapping(editPower{id})RequiresPermissions(role:update)publicStringeditPower(PathVariable(id)Integerid,Modelmodel){RoleroleiRoleService。selectByPrimaryKey(id);model。addAttribute(Role,role);returnprefixeditP}描述修改角色信息保存date201891616:12RequestMapping(editSave)RequiresPermissions(role:update)Operlog(modal角色管理,descr修改角色信息)ResponseBodypublicAjaxResultsave(Rolerole){inti0;try{iiRoleService。updateByPrimaryKeySelective(role);}catch(Exceptione){returnerror(e。getMessage());}returnresult(i);}描述修改角色权限信息保存date201891616:12RequestMapping(editPowerSave)RequiresPermissions(role:update)Operlog(modal角色管理,descr修改角色权限)ResponseBodypublicAjaxResulteditPowerSave(Rolerole,Integer〔〕ids){inti0;try{if(StringUtils。isEmpty(ids)){idsnewInteger〔0〕;}iiRoleService。updateByPrimaryKeyPowerSelective(role,ids);}catch(Exceptione){returnerror(e。getMessage());}清空缓存ShiroUtils。clearCachedAuthorizationInfo();如果用户正在修改的角色id是当前用户的角色id则刷新subject的User信息if(role。getRoleId()。equals(getRoleId())){ShiroUtils。reloadUser(iUserService。selectByPrimaryKey(getUserId()));}returnresult(i);}校验名称唯一PostMapping(checkRoleNameUnique)ResponseBodypublicStringcheckDeptNameUnique(Rolerole){StringuniqueFlag0;if(role!null){uniqueFlagiRoleService。checkRoleNameUnique(role);}returnuniqueF}}项目源码及开发文档 由于限制,这里不能直接放链接,需要项目源码与开发文档的同学转发本文关注私信【0221】即可获取