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.5
1、前端
- 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管理和基本信息查看;可以手动踢出.
- 字典管理
- 权限列表使用treetable展示,增加用户体验(图标显示问题,编辑|删除按钮未完成)
- 表格渐变色有问题
- 解决授权时无法只选择列表的BUG
- zTree取消全部子节点时,父节点不会取消
- 重新设计登录页设计,开启炫酷模式
- 解决字符串自动去除前后空格的BUG
- 校验上传文件是否合法
- 校验文件后缀扩展名是否合法
- 校验上传文件的头信息,防止非法用户通过更改文件后缀名绕过第一步校验
- 解决退出登录时无法清除认证缓存的问题.
- 由于认证成功存入缓存的是整个对象,shiro提供的退出方法无法清除,还有之前所有的操作都是针对该对象进行的,所以重写了退出过滤器,自己手动去清除认证缓存,这样改动是最小的.
- 定义welcome-file-list页面
- 部署外网演示地址
- http://139.224.112.51:8082/admin/index
- 账号:test 密码:test
- 配置Nginx访问图片(配置文件见群共享)
- 修改当前登录密码后,退出登录的逻辑走的是shiro的提供的默认方法,无法清除当前账号登录的次数的相关信息,所以再次登录明明是执行过了退出,确还提醒已经在别的地方登录了
解决办法
- 执行退出走自定义退出过滤器
- 后台对shiro的退出做二次封装(未实现)
- 重写规划包的目录结构,按模块进行划分
- 判断如果已经登录了,还访问login登录地址,做重定向到原来的地址
- 引入feilong-core 1.10.5包
- 并发登录人数控制,限制一个账号只能一处登录,踢出前者(自定义KickoutSessionControlFilter和LoginFilter)
- Ajax请求,前端给出选择框,选择重新登录后执行退出并跳转到登录页面
- 传统请求,被踢出后跳转到登录页面,弹窗提示
- 添加登录过滤器,判断登录账号是否已经在其他地方登录,并进行踢出询问,并展示已经登录用户的信息包括IP和登录时间
- 自定义退出过滤器,实现清除缓存
- 修复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进行密码加密访问.
- 重新配置和实现文件上传
- 解决修改角色授权时不能立即生效问题,目前只解决了当前用户角色授权时立即生效,对其他用户不能马上生效(之前遗留问题)
- 去除浏览器地址栏中url中JSESSIONID参数
- 解决通用mapper用resultType返回时 无法绑定到对象的问题
- 排除对二进制文件的过滤,解决字体图标无法显示
- 添加SpringBoot jar方式打包时,下载jar包内的文件和响应jar包内文本文件内容的例子
- 添加druid-spring-boot-starter
- 数据库密码加密
- druid配置细化
- 对异常进行细分
- Service层抛出指定类型的RuntimeException异常
- Controller层抛出带状态码RumtimeException异常
- 对异常进行统一转化,并响应到客户端
- 重构表单重复提交校验(包括:重复提交后的提示和数据校验未通过token的刷新),全部向外抛出异常,进行统一处理
- 将后端数据校验结果进行客户端页面展示(待处理)
- 添加统一异常处理,并进行了细分
- 添加后端数据校验,支持分组、排序,前后端双层校验,保证数据安全性
- 封装layer提示插件,ajax添加遮罩层,增强客户体验度
- 后台对Ajax操作的,无权限、登陆超时、表单重复提交等情况响应头信息进行统一配置,前台提示的逻辑重新改造
- 添加防止表单重复提交校验前端js+后端token的方式
- 对Ajax请求,提交时由于验证机制未通过,比如:用户名已存在,返回页面修改后再次提交出现token无法验证通过做处理
解决方案: 利用ajax的全局方法 提交时自动加上token值 判断如果有返回的X-Refresh-Token-Form就更新页面所有的tokenForm值
- 由于session是存储在服务器内存中的,在集群环境下不能保证生成token的服务器和验证token的服务器就是同一台,所以需要一种机制可以解决多服务器节点的数据共享.
解决方案: 使用spring session实现session共享或者将token放入redis中
- 对于多开窗口操作同一个功能 比如: 添加用户,进行限制
采用最后打开的窗口有效的方式,并进行页面过期弹窗友好提示
- 安全考虑,可以给formToken设置一个有效期
比如后期放入redis,可以方便借助它的生命周期控制;或者在formToken中加入时间戳进行比对.
- 前端Ajax请求前全局禁用页面submit按钮既可以一定程度防止表单的重复提交,又能大大减轻服务器端访问压力,响应后重新启用按钮.
- 新增调度任务查看详情
- 新增调度日志查看
- 正在执行,执行完成(待实现)
- 动态任务调度
- 改造权限管理模块
- 日志UI界面展示
- spring boot yml文件多环境配置
- thymeleaf 布局调整