1、Guns是什么?
Guns基于Spring Boot2,致力于做更简洁的后台管理系统。
Guns包含系统管理,代码生成,多数据库适配,SSO单点登录,工作流,短信,邮件发送,OAuth2登录,任务调度,持续集成,docker部署等功能,支持Spring Cloud Alibaba微服务。
2、Guns整合了哪些组件?
2.1、springboot
英文文档:https://spring.io/projects/spring-boot/
中文文档:https://qbgbook.gitbooks.io/spring-boot-reference-guide-zh/content/
2.2、shiro
Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。
官网:https://shiro.apache.org/
2.3、mybatis-plus
Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
官网:https://mp.baomidou.com/#/
2.4、beetl
一款Java模板引擎。
百度百科给的定义:Beetl是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。
中文文档:http://ibeetl.com/guide/
官网:http://ibeetl.com/
2.5、flowable
一款工作流引擎,Flowable是Activiti原班主创人员从Activiti分离出来的一套工作流引擎,是一个业务流程管理(BPM)和工作流系统,适用于开发人员和系统管理员。其核心是超快速、稳定的BPMN2流程引擎,易于与 Spring集成使用。
官网:https://www.flowable.org/
2.6、前端模板
EasyWeb,一款基于Layui的后台敏捷开发框架
官网:https://easyweb.vip/
3、Guns能帮我们做什么?
3.1、首先,Guns默认内置了10个系统模块,分别是:
- 用户管理
- 角色管理
- 部门管理
- 菜单管理
- 字典管理
- 业务日志
- 登录日志
- 监控管理
- 通知管理
- 代码生成
这10个系统模块包含了一个后台管理系统的基础功能,包括用户、角色、菜单、通知以及日志记录功能,并且代码生成功能能让我们后续的业务开发更加快捷。
3.2、其次,Guns的项目特点能让我们的开发更加灵活、简洁、易维护。
- 基于SpringBoot,简化了大量项目配置和maven依赖,让您更专注于业务开发,独特的分包方式,代码多而不乱。
- 完善的日志记录体系,可记录登录日志,业务操作日志(可记录操作前和操作后的数据),异常日志到数据库,通过@BussinessLog注解和LogObjectHolder.me().set()方法,业务操作日志可具体记录哪个用户,执行了哪些业务,修改了哪些数据,并且日志记录为异步执行,详情请见@BussinessLog注解和LogObjectHolder,LogManager,LogAop类。
- 利用beetl模板引擎对前台页面进行封装和拆分,使臃肿的html代码变得简洁,更加易维护。
- 对常用js插件进行二次封装,使js代码变得简洁,更加易维护,具体请见webapp/static/js/common文件夹内js代码。
- 利用ehcache框架对经常调用的查询进行缓存,提升运行速度,具体请见ConstantFactory类中@Cacheable标记的方法。
- controller层采用map + warpper方式的返回结果,返回给前端更为灵活的数据,具体参见com.stylefeng.guns.modular.system.warpper包中具体类。
- 防止XSS攻击,通过XssFilter类对所有的输入的非法字符串进行过滤以及替换。
- 简单可用的代码生成体系,通过SimpleTemplateEngine可生成带有主页跳转和增删改查的通用控制器、html页面以及相关的js,还可以生成Service和Dao,并且这些生成项都为可选的,通过ContextConfig下的一些列xxxSwitch开关,可灵活控制生成模板代码,让您把时间放在真正的业务上。
- 控制器层统一的异常拦截机制,利用@ControllerAdvice统一对异常拦截,具体见com.stylefeng.guns.core.aop.GlobalExceptionHandler类。
- 页面统一的js key-value单例模式写法,每个页面生成一个唯一的全局变量,提高js的利用效率,并且有效防止多个人员开发引起的函数名/类名冲突,并且可以更好地去维护代码。