JeeSite 架构特点、安全方面、为什么好、我们的优势

摘要:以 Spring Boot 3.x 或 2.x 为基础,使用一套后端,两套前端技术栈:TS + Vue3 或 Bootstrap + Beetl。真正的轻量级,微内核,快速部署,可最小化运行服务,使用 Maven 管理项目依赖,模块分项目,松耦合,方便增减。

一、架构特点

  1. 以 Spring Boot 3.x 或 2.x 为基础,使用一套后端,两套前端技术栈:TS + Vue3 或 Bootstrap + Beetl。

  2. 真正的轻量级,微内核,快速部署,可最小化运行服务,使用 Maven 管理项目依赖,模块分项目,松耦合,方便增减。

  3. 具有模块化的数据库自动升级,需要安装的功能才会建表,当升级依赖模块时,会自动更新对应的数据库升级脚本。

  4. 功能授权模块灵活,按钮级别,支持 单点登录、第三方登录,丰富的扩展模块,简单 yml 配置即可实现。

  5. 支持多数据源,深入 MyBatis 底层事务,从 DAO 层切换多数据源,方便快捷,彻底的解决必须从 Controller 里切换数据源的麻烦。并且支持,分布式事务,跨应用级别的事务,简单 yml 配置实现。

  6. 数据表主键优化,如分类科目表,采用有意义的主键方式,让客户去自定义,减少后期运维维护成本。

  7. 独创 @Table 注解(优于MyBatis-Plus,也可共存)在 MyBatis 基础上 Dao 层封装:

    • 自动生成增删改查语句,支持联表查询,无需在 mapper.xml 里写基础 SQL,减少开发和维护成本

    • 列表查询条件通过实体自动生成,不用您写各式各样的 *Wrapper、手写字段名、if判断查询条件等

    • 所有列 @Column 定义均放到类头,而不是分布到各个属性或方法上,非常好,主要是有如下原因:

    • 一是,放到表头的好处是,可一览熟知该实体类对应的物理表结构是什么样,开发者思维从物理表结构到对象的映射转换,都是基于物理表结构的,减少后期代码分析的维护成本,@Column 指定物理字段名,而不是指定类上的属性名,也是这个原因;

    • 二是,生成的 SQL 和查询条件,可定义列的排列顺序,方便核查定义,优化查询,提升性能;

    • 三是,方便 @JoinTable 关联表和其它扩展信息的设置,如果分布到类的属性上就不太好管理列

    • 解决 80% 的基础 SQL 编写,后期维护增减字段方便,只需修改该数据和界面即可

  8. 数据权限,数据行级别权限控制,配置化完成权限控制:

    • 不仅仅是角色范围控制数据权限,颗粒度可细化到每个人员的身上

    • 可自定义第三方数据权限,不仅仅是部门和公司,您可以扩展,如:地区,栏目分类,商品分类

    • 无需让您多写代码,根据界面化配置规则,通过代码简单调用,即可实现复杂的数据权限控制

    • 拥有的权限和管理的权限划分,方便不同人员岗位权限区分(专为管理员独有的设计)

    • 支持控制业务范围,根据功能划分权限,有的可以看本部门的,有的可以看本公司的数据

    • 支持跨应用、跨数据库、跨进程的微服务级别的数据权限控制

  9. 视图解析模板语言,为什么使用 Beetl (采用 JS 语法):

    • 它性能非常好,相比 Thymeleaf 好太多,甚至比 JSP 都快上 2 倍,入门也简单很多

    • 它易于模块化,分布式应用,html 格式的文件,可以放到各个模块 jar 包里

    • 它易于扩展,非常方便的去自定义 form 标签,函数,格式化数值、支持 Layout 等

    • 最重要的是:它学习成本非常低,其实就是 js 的语法,如果会 js,则 Beetl 也就会使用了

    • 一般在前端开发周期中,可能会一半以上的时间,去写界面,调布局,做出来的界面还非常不好看,

    • 我们针对这个目的,去封装了前端各种组件,各种函数方法,

    • 让您使用简单的组件,调用复杂的功能,让您只去关注业务;

  10. 分离版采用 Vue3、Vite、Ant Design Vue4 最先进的前端技术栈,封装高效 Form、Table 等组件

二、更多特点

  1. 代码生成工具:界面化操作简单,在线建表、建索引、在线维护多数据源、可同时生成前端代码和后端代码,可自动创建业务模块工程和 Cloud 微服务模块工程,支持多数据源(常见模板包括:单表、主子表、树表、Vue模板、Cloud微服务等模板,支持自由扩展通用业务的代码生成模板)

  2. 缓存监控管理:提供管理界面,采用 J2Cache 二级缓存技术(Caffeine + Redis)支持快速切换为 Redis 缓存,支持集群 Session 和系统缓存共享,二级缓存技术有效的解决 TCP 网络速率瓶颈

  3. 服务器状态监控:查看 CPU,内存,JVM,磁盘信息等。方便运维人员分析系统负载情况,可增加预警

  4. 会话过期时间管理:支持不同的设备采用不同的过期时间;支持单独设定匿名会话超时,有效的减轻服务压力

  5. 支持 SaaS 多租户模式:每个租户数据通过 corp_code 字段进行分离,数据互不干扰、同时 3 种方式,包括:共享表、分模式、分库 等,并支持字典等基础数据租户共享。

  6. 支持 Spring Cloud 架构:分布式,微服务,最小化内核,统一配置中心,统一授权认证中心

  7. 树结构的独特设计:提高运维、数据分析、优化查询

  8. 多用户类型支持:员工、会员、专家、往来单位等

  9. 丰富的内置功能:用户权限、数据权限、系统管理

  10. 定时任务在线配置:界面化生成 cron 表达式,支持集群环境自适应,调度日志监控

  11. BPM 业务流程模块:基于 Flowable,中国式工作流、支持退回、自由流、会签等高级应用

  12. 在线预览系统:文件管理、在线预览图片、文档、文本、视频等格式

  13. 消息推送:APP、短信、邮件、微信,您无需了解消息是怎么发送出去的,只需了解消息发送接口即可

  14. 多语言支持:页面标签、字典菜单、数据国际化(中文、英语、日语等)中文key方便后期维护

  15. 集成云存储:已支持 阿里云OSS、腾讯云COS、七牛云、MinIO,并提供接口灵活扩展其它存储

  16. 可视化数据大屏:提供界面设计器,通过拖拽方式,快速实现可视化数据大屏,大屏轮播等

  17. 方便与第三方系统对接:提供移动端接口、第三方系统调用接口,轻松实现授权认证、数据调用(支持 json、xml 等格式)

  18. 文件上传组件:支持分片上传,断点续传下载,上传文档排序、预览(自动化浏览器支持格式转换)、图片压缩等

  19. 访问日志:系统访问留痕的一个日志记录,根据菜单配置规则,自动记录,无需写注解的麻烦

  20. 表单修改前后的历史留痕:差异数据分析,新值和旧值比较,较大文本展示差异数据结果。

  21. 提供 Web-Mini 极小的微服务,1~2秒完成启动服务,展现出 JeeSite 内核的轻量性。

  22. 在线查询在线人员,强踢在线账号

  23. 支持国产化软硬件和国密算法

  24. 提供丰富的在线文档及案例

三、安全方面

  1. 系统采用 Java 语言开发,具有卓越的通用性、高效性、平台移植性和安全性(适应全行业的软件)

  2. 分层设计层次清楚,低耦合,各层必须通过接口才能接入并进行参数校验,保证数据操作的安全

  3. 双重验证,用户表单提交双验证:包括服务器端验证及客户端验证,防止用户通过浏览器恶意篡改(如不可写文本域、隐藏变量篡改、上传非法文件、用户角色越级授权等)避免客户端跳过验证直接操作数据库

  4. 安全编码,用户表单提交所有数据,在服务器端都进行安全编码,防止用户提交非法脚本及SQL注入获取敏感数据,确保数据安全

  5. 密码加密,登录用户密码进行SHA1散列加密,此加密方法是不可逆的。保证密文泄露后的安全问题

  6. 强制访问,系统对管理端链接都进行用户身份权限验证及权限,防止用户直接获取资源

  7. 数据库密码及其它安全密钥自动加密配置(只需配置参数即可实现,无需使用复杂的秘钥生成功能)

  8. MyBatis 参数采用安全接受,特殊操作都必须经过 SQL 安全过滤,杜绝 SQL 注入问题

  9. 所有请求参数获取,均通过 XSS 跨站脚本过滤方法,杜绝 XSS 问题

  10. 乐观锁简单实现,避免一条数据多人同时操作时的数据覆盖,提高数据安全性

  11. 通过 yml 简单配置,轻松解决 JS 是否允许跨域操作,自适应跨域情况

  12. 身份认证:

    • 登录失败多少次后显示验证码

    • 登录失败多少次后锁定账号及锁定账号时间

    • 登录账号密码可加密后再提交后台

    • 同设备是否允许账号多地登录

  13. 密码策略:

    • 初始密码修改策略,提醒或强制用户修改初始密码

    • 账号密码修改策略,多长时间内未修改,则提醒或强制修改密码

    • 开关控制密码修改多少次内不允许重复,验证与上次或前几次的密码是否相同

    • 开关控制账号密码修改最低安全等级,很弱、弱、安全、很安全,四个等级,强制或提醒

    • 密码校验包括:长度大于等于8、有大写字母、有小写字母、有数字、有特殊字符

    • 等级验证规则:满足1个是很弱,2个是弱,3或4个是安全,5个都满足是很安全

  14. 权限审计:

    • 账号密码审计(未修改初始密码、使用简单密码、定期未修改密码、长期未登录、未设置密保、以上全部、审计结果导出)

    • 菜单权限审计(根据菜单及权限查询,都有哪些用户)

    • 用户权限审计(根据用户查询,都有哪些菜单及权限)

  15. 安全审计:

    • 操作记录系统的接入日志、修改日志、查询日志、登录登出日志、操作IP等

    • 能够详尽记录每一次用户行为,每次提交的前后数据进行对比,分析出差异数据,新旧值比较

    • 使每一步操作有据可循,实时记录系统数据安全状况,精准识别企业异常访问和潜在威胁的源头

    • 支持涉密系统的三员管理配置,互相牵制权限策略、三员分立,增强安全审计工作

  16. 登录提交信息加密(支持 DES 加密、Base64加密等)

  17. 支持设置获取客户端IP的Header名称,防止IP伪造

  18. 支持设置允许的请求方法设定(如:仅允许 GET、POST 请求)

  19. 是否允许账号多地登录,如果设置为false,同一个设备类型的其它地点登录的相同账号被踢下线

  20. 是否允许多账号多设备登录,如果设置为false,其它地点登录的相同账号全部登录设备将被踢下线

  21. 是否允许刷新主框架页,如果设置为false,刷新主页将导致重新登录。如 银行系统 个人首页不允许刷新

  22. 是否允许嵌入到外部网站iframe中(true:不限制,false:不允许)

  23. 是否允许跨域访问 CORS,解决 Cookie 跨域访问问题

  24. 是否允许跨域访问时 CORS,可以使用的方法和响应头(如:仅允许 GET、POST 请求)

  25. 是否允许接收跨域的 Cookie 凭证数据 CORS 设置

  26. 是否允许的网站来源地址,不设置为全部地址(避免一些跨站点请求伪造 CSRF)

  27. 是否在登录后生成新的Session(默认false)安全系数更高的系统设置

  28. 可设置多个允许的内部系统 IP 地址的白名单,否则拒绝访问

  29. 支持对敏感数据进行加密存储

  30. 支持密码国密加密算法

四、用户界面

  1. 清爽的平面化界面设计风格,精细,更加美观、高端、大气、上档次

  2. 支持手机或平板访问,响应式样式、响应式布局,根据屏幕分辨率自适应控件布局

  3. 无刷新设计,除了进入功能页面和新页面,其它情况下全部采用 Ajax 交互,优化体验和性能

  4. 支持一键换肤,只需在 yml 里修改下主题名称即可快速切换整个UI的风格,不仅仅是色调和样式,布局也可改变。支持自定义扩展项目独有的主题样式风格

  5. 优化用户功能操作,大众思维模式,功能清晰,更加贴切和友好

全栈版本

  1. 采用比较简单易学、性能最好的 Beetl 模板引擎,它的优点很多,大家可自行查阅看看,这里不多说了

  2. 封装 Beetl UI 通用组件,简单实现基本表单控件、树选择,列表选择,文件上传,等等,总之是简化开发

  3. 数据表格 jqGrid 组件封装,自动完成分页、排序、列宽、多表头、子表、编辑表、等

  4. 支持前后分离应用,方便与手机 API 接口对接,Token 方式授权

  5. 支持 IE9+ 及其他任何浏览器

前后分离

  1. 基于 Vue 3、Vite、Ant Design Vue 4.0、TypeScript、Vben Vue Admin,最先进的技术栈。

  2. 较好的协作性,前后端开发人员分别专注于各自的领域,减少了彼此的依赖和干扰,从而提高了开发效率和协作性。

  3. Table 列表和 Form 表单以数据驱动视图,极大简化了业务功能开发,数据存储结构更清晰化,更利于维护

  4. 完善的小功能组件的封装,为微小中大项目的开发,提供现成的开箱解决方案及丰富的示例

  5. 自由度较高,提供自定义插槽、渲染、事件等接口,多复杂的业务都可以自由扩展实现。

五、高可用性

  1. 支持一下技术手段,可以保证服务的连续性、性能和可用性,系统不中断24小时提供服务

  2. 集群化部署,在多个节点上部署同一个服务,当某个节点出现故障时,可以将请求自动转发到其它节点上

  3. 负载均衡,将客户端请求分配到不同的服务节点上,从而避免某个节点负载过重而导致服务不可用

  4. 故障转移,当某个服务节点出现故障时,需要自动将请求转移到其它可用的节点上,保证服务的连续性

  5. 自动扩缩容,自动扩缩容可以根据系统的负载自动增加或减少服务节点的数量,保证系统的性能和可用性

  6. 数据库部署,数据复制(主从、多主)和备份可以保证数据的可靠性和可用性