基于 JeecgBoot低代码平台(v3.9.1)实现的金融科技信息门户网站(二次开发实践)
一、技术栈与版本
1.1 后端技术栈
|
Java |
17 |
LTS 版本,性能稳定,支持虚拟线程 |
|
Spring Boot |
3.2.x |
社区成熟,生态完善,便于快速构建 |
|
JeecgBoot |
3.6.x |
低代码平台,提供基础 CRUD 和权限框架 |
|
MyBatis-Plus |
3.5.x |
增强 MyBatis,简化 CRUD 操作 |
|
MySQL |
8.0+ |
稳定可靠,社区活跃,适合中小型项目 |
|
Redis |
7.0+ |
高性能缓存,支持多种数据结构 |
|
Shiro |
1.12.x |
轻量级权限框架,易于集成 |
|
JWT |
4.4.x |
无状态认证,适合前后端分离架构 |
1.2 前端技术栈
|
Vue |
3.4.x |
组合式 API,性能优异,生态成熟 |
|
Vite |
6.5.x |
快速冷启动,HMR 响应迅速 |
|
TypeScript |
5.4.x |
类型安全,提升代码可维护性 |
|
Tailwind CSS |
3.4.x |
原子化 CSS,快速构建 UI |
|
Element Plus |
2.6.x |
丰富组件库,与 Vue3 深度集成 |
|
Vue Router |
4.3.x |
Vue 官方路由管理 |
|
Lucide Vue |
0.36.x |
轻量级图标库,按需加载 |
1.3 项目结构
JeecgBoot/
├── jeecg-boot/ # 后端服务(约 120KB)
│ └── jeecg-boot-module/
│ └── jeecg-module-demo/
│ └── src/main/java/org/jeecg/modules/demo/yucms/
│ ├── controller/ # REST API 控制层
│ ├── service/ # 业务逻辑层(接口+实现)
│ ├── mapper/ # MyBatis 数据访问层
│ └── entity/ # JPA 实体类
├── jeecgboot-vue3/ # 管理端前端(约 80MB)
│ └── src/views/yucms/ # 内容管理后台页面
└── fintech-vue3/ # 门户网站前端(约 60MB)
├── src/pages/ # 门户页面(首页、列表、详情、搜索)
├── src/components/ # 公共组件(Header、Footer、Banner)
└── src/api/ # API 接口封装
二、系统功能设计
2.1 功能模块总览
|
内容管理 |
文章管理 |
增删改查、状态流转、富文本编辑 |
支撑内容生产与发布 |
|
栏目管理 |
分类层级、排序、图标配置 |
构建内容组织体系 |
|
|
横幅管理 |
多类型广告位、时间范围控制 |
支持营销活动推广 |
|
|
用户管理 |
用户认证 |
JWT 登录、权限验证 |
保障系统安全 |
|
角色管理 |
角色分配、权限配置 |
细粒度权限控制 |
|
|
门户网站 |
首页 |
轮播图、推荐文章、广告位 |
提升用户体验 |
|
文章列表 |
分类筛选、排序、分页 |
便于内容浏览 |
|
|
文章详情 |
内容展示、关键词高亮、防复制 |
保护原创内容 |
|
|
全文搜索 |
关键词检索、结果高亮 |
提升内容发 |
2.1.1 信息门户功能
首页导航

今日精选

热门分类

文章详情

文章推荐

关键字搜索

2.1.2 后台管理功能
导航栏目管理

文章发布管理

海报管理

2.2 核心业务流程
2.2.1 文章生命周期管理

设计要点:
-
状态机设计:草稿(1) → 待审核(2) → 已发布(3) → 回收站(4)
-
审核机制:支持多级审核、意见反馈
-
定时发布:支持设置发布时间,自动上线
-
软删除:删除后进入回收站,支持恢复
2.2.2 搜索流程设计

设计要点:
-
精确匹配:完整关键词匹配,避免无关结果
-
多字段搜索:同时搜索标题和正文内容
-
高亮显示:详情页命中关键词标记
-
分页优化:默认每页 10 条,支持翻页
2.3 数据字典设计
|
yucms_article_status |
文章状态 |
1-草稿, 2-待审核, 3-已发布, 4-回收站 |
控制文章生命周期 |
|
yucms_banner_type |
横幅类型 |
1-首页轮播, 2-首页横条, 3-首页960×670, 4-首页320×790, 5-首页300×250, 6-List页640×360 |
区分不同广告位 |
|
yucms_banner_status |
横幅状态 |
0-禁用, 1-启用 |
控制横幅展示 |
2.4 用户角色权限设计
|
超级管理员 |
所有功能 |
系统最高权限 |
|
内容管理员 |
文章管理、栏目管理、横幅管理 |
内容生产与发布 |
|
审核员 |
文章审核 |
仅审核权限 |
|
访客 |
门户网站浏览 |
无后台权限 |
三、系统架构设计
3.1 架构设计原则
|
单一职责 |
每个模块/类只负责一个功能 |
控制器、服务、数据访问分离 |
|
开闭原则 |
对扩展开放,对修改关闭 |
接口抽象、策略模式 |
|
依赖倒置 |
依赖抽象而非具体实现 |
面向接口编程 |
|
模块化 |
按业务域划分模块 |
yucms 模块独立于核心模块 |
|
高内聚低耦合 |
模块内部紧密,模块间松耦合 |
通过 API 接口交互 |
3.2 应用架构

架构层次说明:
|
展示层 |
用户交互、界面渲染 |
Vue3 + Tailwind CSS |
|
网关层 |
路由转发、负载均衡、静态资源服务 |
Nginx |
|
业务层 |
业务逻辑处理、权限控制 |
Spring Boot |
|
数据层 |
数据持久化、缓存 |
MySQL + Redis |
3.3 模块职责划分
|
JeecgBoot 核心 |
通用基础服务 |
用户认证、权限管理、数据字典、文件上传 |
|
Yucms 业务模块 |
内容业务逻辑 |
文章管理、栏目管理、横幅管理、搜索服务 |
|
门户网站 |
面向用户的内容展示 |
首页聚合、文章浏览、搜索交互 |
|
管理后台 |
面向管理员的管理界面 |
内容编辑、审核流程、系统配置 |
3.4 数据架构
3.4.1 核心实体关系

3.4.2 数据库设计要点
文章表 (yucms_article)
-
content 字段:使用 LONGTEXT 类型,支持最大 4GB 存储,满足富文本内容需求
-
category_id:外键关联栏目表,支持多级分类
-
publish_time:支持定时发布,索引优化查询
横幅表 (yucms_banner)
-
type 字段:区分不同广告位,便于前端按需获取
-
start_time/end_time:控制横幅有效期,自动上下线
-
banner_status:手动控制启用/禁用状态
栏目表 (yucms_category)
-
parent_id:支持无限层级分类
-
sort_order:自定义排序
3.5 API 设计规范
3.5.1 命名规范
|
资源命名 |
复数形式 |
/yucms/article/list |
|
HTTP 方法 |
动词语义 |
GET 查询、POST 创建、PUT 更新、DELETE 删除 |
|
路径层级 |
/模块/资源/操作 |
/yucms/article/{id} |
3.5.2 响应格式
{
"success": true,
"code": 200,
"message": "操作成功",
"result": {},
"timestamp": 1704067200000
}
3.5.3 核心 API 列表
|
/yucms/article/list |
GET |
文章列表查询 |
公开 |
|
/yucms/article/{id} |
GET |
文章详情 |
公开 |
|
/yucms/article/add |
POST |
创建文章 |
内容管理员 |
|
/yucms/article/edit |
PUT |
更新文章 |
内容管理员 |
|
/yucms/article/delete |
DELETE |
删除文章 |
内容管理员 |
|
/yucms/banner/list |
GET |
横幅列表 |
公开 |
|
/yucms/category/tree |
GET |
栏目树 |
公开 |
四、系统部署
4.1 环境要求
|
CPU |
2核 |
4核 |
支撑后端服务和数据库 |
|
内存 |
4GB |
8GB |
Java 服务建议至少 4GB |
|
磁盘 |
50GB |
100GB |
存储代码、日志、静态资源 |
|
网络 |
1Mbps |
10Mbps |
保障用户访问体验 |
|
系统 |
CentOS 7+ |
CentOS 8 |
稳定的 Linux 发行版 |
4.2 部署架构
服务器 (阿里云ECS)
├── Nginx (80/443端口)
│ ├── / → fintech-vue3 (门户)
│ ├── /admin → jeecgboot-vue3 (管理)
│ └── /jeecgboot → 后端API
├── Java (8080端口)
│ └── jeecg-boot.jar (Spring Boot 应用)
├── MySQL (3306端口)
│ └── jeecgboot 数据库
└── Redis (6379端口)
└── 缓存服务(Token、字典数据)
4.3 部署流程
4.3.1 数据库初始化
# 创建数据库
CREATE DATABASE jeecgboot DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 创建用户
CREATE USER 'jeecg'@'localhost' IDENTIFIED BY 'Jeecg@123';
GRANT ALL PRIVILEGES ON jeecgboot.* TO 'jeecg'@'localhost';
FLUSH PRIVILEGES;
# 导入初始化脚本
mysql -u jeecg -pJeecg@123 jeecgboot < init.sql
4.3.2 后端服务启动
# 编译打包(开发环境)
cd jeecg-boot/jeecg-boot-module
mvn clean package -DskipTests
# 启动服务
nohup java -jar jeecg-boot-module-system/target/jeecg-boot-module-system-*.jar \\
–server.port=8080 \\
–spring.datasource.url=jdbc:mysql://localhost:3306/jeecgboot \\
–spring.datasource.username=jeecg \\
–spring.datasource.password=Jeecg@123 \\
–spring.redis.host=localhost \\
–spring.redis.port=6379 > /var/log/jeecg-boot.log 2>&1 &
4.3.3 前端构建部署
# 门户前端
cd fintech-vue3
npm install –production
npm run build
rm -rf /usr/share/nginx/html/*
cp -r dist/* /usr/share/nginx/html/
# 管理前端
cd jeecgboot-vue3
npm install –production
npm run build
mkdir -p /usr/share/nginx/html/admin
cp -r dist/* /usr/share/nginx/html/admin/
4.3.4 Nginx 配置要点
server {
listen 80;
server_name your-domain.com;
# 门户前端
location / {
root /usr/share/nginx/html;
try_files $uri $uri/ /index.html;
expires 1d;
}
# 管理前端
location /admin/ {
root /usr/share/nginx/html;
try_files $uri $uri/ /admin/index.html;
expires 1d;
}
# 后端API
location /jeecgboot/ {
proxy_pass http://localhost:8080/jeecgboot/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
}
# 静态资源缓存
location ~* \\.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
root /usr/share/nginx/html;
expires 7d;
add_header Cache-Control "public, immutable";
}
}
五、关键设计决策
5.1 认证与权限设计
设计目标:实现无状态认证,支持多端访问
方案选择:JWT + Redis
|
Token 生成 |
用户登录成功后生成,包含用户名、过期时间 |
|
Token 存储 |
Redis 存储 Token,有效期为过期时间的 2 倍 |
|
自动刷新 |
每次请求时检查 Token 剩余时间,自动延长有效期 |
|
单点登录 |
支持同一账号多端登录,强制下线功能 |
安全考虑:
-
Token 有效期:PC 端 30 天,移动端 30 天
-
密码加密:BCrypt 算法,强度 10
-
防暴力破解:登录失败 5 次后锁定 15 分钟
5.2 横幅展示逻辑设计
设计目标:根据类型获取有效横幅,支持时间范围控制
核心逻辑:
|
1 |
查询 |
根据 type 查询横幅列表 |
|
2 |
过滤状态 |
筛选 banner_status = 1 的横幅 |
|
3 |
时间校验 |
检查当前时间在 start_time 和 end_time 之间 |
|
4 |
排序 |
按 update_time 或 create_time 降序排序 |
|
5 |
取前 N 条 |
根据广告位需求取前 N 条 |
边界情况处理:
-
update_time 为空:使用 create_time 作为排序依据
-
时间范围为空:视为永久有效
-
不足 N 条:按实际数量返回
5.3 防复制功能设计
设计目标:保护原创内容,引导用户关注公众号
实现方式:
|
事件拦截 |
监听 copy、contextmenu、selectstart 事件 |
所有现代浏览器 |
|
CSS 控制 |
user-select: none |
部分浏览器支持 |
|
弹窗提示 |
复制时弹出公众号二维码 |
提升转化率 |
用户体验考虑:
-
弹窗设计美观,与网站风格统一
-
支持点击关闭或自动关闭
-
提供关注公众号获取完整资料的引导
5.4 数据字典刷新机制
设计目标:支持数据字典实时更新,避免缓存导致的数据不一致
解决方案:
|
首次加载 |
从后端获取,存入内存缓存 |
|
常规请求 |
优先读取缓存 |
|
强制刷新 |
通过 refresh 参数跳过缓存 |
|
管理后台修改 |
手动刷新缓存 |
缓存策略:
-
内存缓存:减少数据库查询
-
定时刷新:每小时自动刷新一次
-
手动刷新:支持管理后台触发
六、性能优化策略
6.1 前端优化
|
图片懒加载 |
Intersection Observer API |
减少首屏加载时间 |
|
资源压缩 |
Vite 构建压缩 |
减小文件体积 60%+ |
|
代码分割 |
Vue Router 懒加载 |
按需加载组件 |
|
CDN 加速 |
静态资源托管 CDN |
降低服务器压力 |
|
缓存策略 |
Nginx 配置缓存头 |
减少重复请求 |
6.2 后端优化
|
索引优化 |
文章表 title、content、category_id 字段建立索引 |
查询速度提升 10 倍+ |
|
分页优化 |
使用 MyBatis-Plus 分页插件 |
避免全表扫描 |
|
缓存策略 |
Redis 缓存热点数据 |
减少数据库查询 80%+ |
|
连接池配置 |
合理设置最大连接数 |
避免连接耗尽 |
|
异步处理 |
消息队列处理非核心任务 |
提升响应速度 |
6.3 数据库优化
|
表结构优化 |
合理设计字段类型和长度 |
减少存储空间 |
|
索引策略 |
按需创建索引,避免过度索引 |
平衡查询和写入性能 |
|
查询优化 |
避免 SELECT *,使用 JOIN 代替子查询 |
提升查询效率 |
|
分表分库 |
数据量大时考虑水平分表 |
支持海量数据 |
七、安全性考虑
7.1 安全威胁与防护
|
SQL 注入 |
MyBatis-Plus 参数化查询 |
数据访问层 |
|
XSS 攻击 |
富文本过滤、输出转义 |
前端展示层 |
|
CSRF |
JWT Token 验证 |
认证层 |
|
文件上传 |
格式校验、大小限制、存储隔离 |
文件上传接口 |
|
敏感信息泄露 |
密码加密、日志脱敏 |
数据层、日志系统 |
|
暴力破解 |
登录失败锁定、验证码 |
认证层 |
7.2 安全配置
|
密码强度 |
至少 8 位,包含大小写字母、数字、特殊字符 |
防止弱密码 |
|
Token 有效期 |
30 天 |
平衡安全性和用户体验 |
|
会话超时 |
30 分钟无操作自动退出 |
管理后台 |
|
HTTPS |
强制启用 |
生产环境 |
八、总结
本系统基于 JeecgBoot 低代码平台进行二次开发,构建了一个功能完整的企业级门户网站系统。
8.1 项目特点
|
技术栈现代化 |
Vue3 + Spring Boot 3,性能优异,开发体验好 |
|
架构清晰 |
前后端分离,模块化设计,职责分明 |
|
功能完整 |
文章管理、横幅管理、全文搜索、防复制保护 |
|
易于扩展 |
预留扩展点,便于后续功能迭代 |
|
安全性高 |
多重安全防护,保障系统稳定 |
8.2 适用场景
|
企业信息门户网站 |
★★★★★ |
|
内容管理平台 |
★★★★★ |
|
金融科技资讯站 |
★★★★★ |
|
知识分享平台 |
★★★★☆ |
8.3 开源价值
本项目可作为:
-
JeecgBoot 二次开发学习参考
-
企业门户网站建设模板
-
内容管理系统基础框架
即将开源源代码,请收藏关注






