Good权限管理系统是作者学习springBoot时基于sp
平台简介
Good权限管理系统是作者学习springBoot时基于springBoot开发的一套轻量级的权限系统,其目的是形成一套属于自己的通用的开发框架 以后来项目的时候就可以直接基于此平台进行开发,减少重复工作量. 目前还有好多功能未实现,后续会陆续完成并全部开源!
访问地址:
链接: http://localhost:8081/admin/index
用户名: admin
密码: 123
演示地址 - http://139.224.112.51:8082/admin/index - 账号:test 密码:test
待完成:
加密规则 加盐 (先不解决) 项目启动 初始化admin权限信息 (先不解决) 添加完菜单资源后,超级管理员自动分配权限(先不解决) 添加spring cache使用基于注解方式的缓存管理,同时可以切换任意第三方缓存主要功能介绍 权限: 使用Shiro进行权限控制,灵活的可控制到页面或按钮,满足绝大部分的权限需求. 数据库: 使用Druid数据库连接池,可以监控数据库访问性能,SQL执行效率进行SQL优化,同时使用多环境配置方式可以动态切换到开发环境、测试环境、生产环境. 日志:使用Logback进行日志输出,使用多环境配置方式可以动态切换到开发环境、测试环境、生产环境,同时基于时间和文件大小分割日志文件并进行归档. 任务调度: 使用Spring+Quartz,基于数据库的分布式定时任务,既可以通过Http的方式调用其它项目的RESTFull接口,也可以执行自己本地的调度任务,支持动态增加、删除、修改任务、暂停|恢复、立即执行一次、查看执行记录,无需重启. 公共异常处理和数据校验 内置功能 系统管理 用户管理(已完成) 角色管理(已完成) 权限管理(已完成) 组织机构(未完成) 字典管理(未完成) SQL监控(已完成) 在线用户管理 调度管理(完成) 内容管理(未完成) 日志管理(已完成) 开发环境 Intellij IDEA 2016.2 jdk 1.8 Maven 3.3.9 Tomcat 8.5 Mysql 5.7 Navicat for Mysql Google浏览器 技术选型
1、后端
核心框架:Spring Boot 1.5.4 视图框架:Spring MVC 4.3.9 安全框架:Apache Shiro 1.3.2 任务调度:Spring+Quartz 2.x 持久层框架:Mybatis 3.4.4 + 通用Mapper 3.4.2 服务端验证:Hibernate validator 5.3.5 API生成工具: Swagger2 单元测试:Junit 4.12 网络客户端:Spring RestTemplate(OKGO) + OKHttp Email客户端:Spring + JavaMail 模板引擎:Thymeleaf 3.0.0 数据库连接池:Alibaba Druid 1.1.0 缓存框架:Spring Cache + Ehcache 2.5.3 日志管理:SLF4J 1.7.22 + Logback 1.1.8 分页插件:PageHelper 5.0.3 工具类:Apache Commons、Jackson 2.2、Lombok 1.16.14、Hutool 2.16.0、feilong-core 1.10.51、前端
UI框架:H-UI 3.0 JS框架:jQuery 1.11.0 表单验证控件:Jquery-validation 1.14.0 树结构控件:zTree v3 分页控件:laypage 1.3 弹出层组件:layer 2.4 富文本编辑器:ueditor 1.4.3 上传文件控件:webuploader 0.1.5 日期选择控件:My97DatePicker 4.8 数据图表:echarts 3.4.0 表单美化插件:iCheck 0.7 功能展示
因为本人能力有限,如果系统中存在任何Bug或者缺陷,欢迎大家及时告知我,希望于大家共同学习!
QQ交流群641213116特别鸣谢 Looly / hutool 一个Java基础工具类,对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种Util工具类 feilong / feilong-core 让Java开发更简便的工具包,让你从大量重复的底层代码中脱身,提高工作效率 abel533 / Mapper 极其方便的使用Mybatis单表的增删改查 abel533 / Mybatis_PageHelper Mybatis分页插件 人人开源 / renren-security renren-security是一个轻量级权限管理系统 H-ui / admin H-ui.admin是用H-ui前端框架开发的轻量级网站后台模版 更新日志 计划更新 会话管理 对在线用户session管理和基本信息查看;可以手动踢出. 字典管理 2017年9月24日 解决quartz 触发器是CronTrigger模式时 调用scheduler.rescheduleJob方法后会立即执行任务的问题 解决修改定时任务cron表达式后执行日志没有更新的问题 2017年9月7日 解决定时任务里无法通过注解自动注入spring容器中的bean的问题 2017年8月20日 权限列表使用treetable展示,增加用户体验 2017年8月14日 解决授权时无法只选择列表的BUG zTree取消全部子节点时,父节点不会取消 2017年8月12日 重新设计登录页设计,开启炫酷模式 解决字符串自动去除前后空格的BUG 2017年8月11日 校验上传文件是否合法 校验文件后缀扩展名是否合法 校验上传文件的头信息,防止非法用户通过更改文件后缀名绕过第一步校验 2017年8月9日 解决退出登录时无法清除认证缓存的问题. 由于认证成功存入缓存的是整个对象,shiro提供的退出方法无法清除,还有之前所有的操作都是针对该对象进行的,所以重写了退出过滤器,自己手动去清除认证缓存,这样改动是最小的. 2017年8月5日 定义welcome-file-list页面 部署外网演示地址 http://139.224.112.51:8082/admin/index 账号:test 密码:test 配置Nginx访问图片(配置文件见群共享) 修改当前登录密码后,退出登录的逻辑走的是shiro的提供的默认方法,无法清除当前账号登录的次数的相关信息,所以再次登录明明是执行过了退出,确还提醒已经在别的地方登录了注:不定期发放福利干货!!
2017年8月1日 重写规划包的目录结构,按模块进行划分 判断如果已经登录了,还访问login登录地址,做重定向到原来的地址 2017年7月31日 引入feilong-core 1.10.5包 并发登录人数控制,限制一个账号只能一处登录,踢出前者(自定义KickoutSessionControlFilter和LoginFilter) Ajax请求,前端给出选择框,选择重新登录后执行退出并跳转到登录页面 传统请求,被踢出后跳转到登录页面,弹窗提示 添加登录过滤器,判断登录账号是否已经在其他地方登录,并进行踢出询问,并展示已经登录用户的信息包括IP和登录时间 自定义退出过滤器,实现清除缓存 2017年7月20日 修复BUG 重构角色授权功能和添加角色分离 富文本编辑器更换为UEditor(待完成),去除h-ui中多余的依赖 升级springBoot版本到1.5.4 升级Mybatis到3.4.4,mapper-spring-boot-starter到1.3.0,pagehelper-spring-boot-starter到1.1.2 升级druid-spring-boot-starter到1.1.2 注:V1.1.1不支持connectionPropreties配置,所以无法配置ConfigFilter进行密码加密访问. 重新配置和实现文件上传 2017年7月18日 解决修改角色授权时不能立即生效问题,目前只解决了当前用户角色授权时立即生效,对其他用户不能马上生效(之前遗留问题) 去除浏览器地址栏中url中JSESSIONID参数 2017年7月14日 解决通用mapper用resultType返回时 无法绑定到对象的问题 排除对二进制文件的过滤,解决字体图标无法显示 2017年6月28日 添加SpringBoot jar方式打包时,下载jar包内的文件和响应jar包内文本文件内容的例子 2017年6月27日 添加druid-spring-boot-starter 数据库密码加密 druid配置细化 2017年5月27日 对异常进行细分 Service层抛出指定类型的RuntimeException异常 Controller层抛出带状态码RumtimeException异常 对异常进行统一转化,并响应到客户端 重构表单重复提交校验(包括:重复提交后的提示和数据校验未通过token的刷新),全部向外抛出异常,进行统一处理 将后端数据校验结果进行客户端页面展示(待处理) 2017年5月26日 添加统一异常处理,并进行了细分 添加后端数据校验,支持分组、排序,前后端双层校验,保证数据安全性 2017年5月25日 封装layer提示插件,ajax添加遮罩层,增强客户体验度 2017年5月24日 后台对Ajax操作的,无权限、登陆超时、表单重复提交等情况响应头信息进行统一配置,前台提示的逻辑重新改造 2017年5月23日 添加防止表单重复提交校验前端js+后端token的方式 对Ajax请求,提交时由于验证机制未通过,比如:用户名已存在,返回页面修改后再次提交出现token无法验证通过做处理解决办法
执行退出走自定义退出过滤器 后台对shiro的退出做二次封装(未实现)
由于session是存储在服务器内存中的,在集群环境下不能保证生成token的服务器和验证token的服务器就是同一台,所以需要一种机制可以解决多服务器节点的数据共享.解决方案: 利用ajax的全局方法 提交时自动加上token值 判断如果有返回的X-Refresh-Token-Form就更新页面所有的tokenForm值
对于多开窗口操作同一个功能 比如: 添加用户,进行限制解决方案: 使用spring session实现session共享或者将token放入redis中
安全考虑,可以给formToken设置一个有效期采用最后打开的窗口有效的方式,并进行页面过期弹窗友好提示
前端Ajax请求前全局禁用页面submit按钮既可以一定程度防止表单的重复提交,又能大大减轻服务器端访问压力,响应后重新启用按钮. 2017年5月22日 新增调度任务查看详情 新增调度日志查看 正在执行,执行完成(待实现) 2017年5月4日 动态任务调度 改造权限管理模块 日志UI界面展示 2017年4月24日 spring boot yml文件多环境配置 thymeleaf 布局调整比如后期放入redis,可以方便借助它的生命周期控制;或者在formToken中加入时间戳进行比对.
版权声明:
1、该文章(资料)来源于互联网公开信息,我方只是对该内容做点评,所分享的下载地址为原作者公开地址。2、网站不提供资料下载,如需下载请到原作者页面进行下载。