大家好,我是 ForgeAdmin 的作者。今天给大家带来两个非常实用的企业级特性更新:第三方登录认证 和 数据字段脱敏。
项目简介
ForgeAdmin 是一个基于 Spring Boot 3 + Vue 3 的真正 微内核 全插件化中后台管理框架。如果你还不了解,可以先看我之前的介绍文章:《做了一个真正微内核全插件化的Java后台框架,比若依更灵活》
GitHub:github.com/yaomindong1…
欢迎 Star ⭐ 关注项目进展~
一、第三方登录认证
为什么需要第三方登录?
现在的系统几乎都需要支持第三方登录了:
- 用户可以用微信、GitHub、Gitee 快速登录,不用再注册账号
- 降低用户登录门槛,提升转化率
- 企业内部系统可以对接企业微信、钉钉扫码登录
ForgeAdmin 本次更新完整实现了第三方登录认证功能,支持灵活配置多种平台。
支持的第三方平台
目前已经支持以下主流平台:
| 平台 | 支持状态 | 使用场景 |
|---|---|---|
| Gitee | ✅ 已支持 | 开源开发者账号登录 |
| GitHub | ✅ 已支持 | GitHub 账号一键登录 |
| 微信开放平台 | ✅ 已支持 | 微信扫码登录 |
| 企业微信 | ✅ 已支持 | 企业内部系统登录 |
| 钉钉 | ✅ 已支持 | 钉钉扫码登录 |
| ✅ 已支持 | Google 账号登录 |
核心特性
1. 可视化配置后台
在系统管理中新增了「第三方登录配置」页面,你可以:
- 动态配置每个平台的 Client ID 和 Client Secret
- 开启/关闭某个平台的登录
- 修改回调地址
- 不需要改代码,界面上点几下就配置好了
2. 策略模式设计,易于扩展
整体采用策略模式设计,新增一个第三方平台只需要实现一个策略类:
public interface SocialAuthStrategy {
// 获取授权URL
AuthUrl getAuthUrl(String state);
// 获取AccessToken
AuthToken getAccessToken(String code);
// 获取用户信息
AuthUser getUserInfo(AuthToken token);
// ...
}
框架已经封装好了所有公共逻辑,你只需要关注平台特有的部分。
3. 用户绑定机制
- 已注册用户可以在个人中心绑定第三方账号
- 未注册用户可以直接用第三方账号注册登录
- 支持一个用户绑定多个第三方账号
- 解绑操作也很方便
4. 前端完整实现
前端也已经完整实现:
- 登录页显示第三方登录图标
- 点击跳转授权
- 回调页面处理授权结果
- 自动获取用户信息并登录
使用方式
- 在第三方平台开发者后台创建应用,获取 Client ID 和 Secret
- 在 ForgeAdmin 后台「第三方登录配置」添加配置
- 配置回调地址(和你第三方平台填写的一致)
- 开启配置,刷新前端页面,就能看到登录图标了
整个过程不需要改一行代码,完全可视化配置。
二、数据字段脱敏
为什么需要字段脱敏?
在企业级开发中,数据安全合规越来越重要:
- 用户手机号、身份证号不能完整返回给前端
- 日志打印的时候也不能输出明文
- 满足《个人信息保护法》合规要求
- 防止内部人员泄露用户隐私
ForgeAdmin 本次新增了基于 Jackson 序列化的字段脱敏功能,使用非常简单。
支持的脱敏类型
一共内置了 10+ 种常用脱敏策略:
| 脱敏类型 | 原始数据 | 脱敏结果 |
|---|---|---|
| 手机号 | 13800138000 | 138****8000 |
| 邮箱 | example@gmail.com | e****@gmail.com |
| 身份证 | 110101199001011234 | 110***********1234 |
| 姓名 | 张三 | 张* |
| 地址 | 北京市朝阳区XX街道 | 北京市朝阳区******** |
| 银行卡 | 6222021234567890123 | 6222 **** **** **** 123 |
| 密码 | password | ******** |
| 车牌号 | 京A12345 | 京A*** |
| ... | 持续更新中 |
使用方式
使用非常简单,只需要在字段上加一个 @Desensitize 注解:
public class UserInfo {
// 手机号脱敏
@Desensitize(type = DesensitizeType.PHONE)
private String phone;
// 身份证脱敏
@Desensitize(type = DesensitizeType.ID_CARD)
private String idCard;
// 邮箱脱敏
@Desensitize(type = DesensitizeType.EMAIL)
private String email;
// 自定义脱敏策略
@Desensitize(strategy = MyDesensitizeStrategy.class)
private String customField;
}
就这么简单!Jackson 序列化的时候会自动按照规则脱敏,返回给前端的就是脱敏后的数据了。
核心设计
1. 策略工厂模式
通过策略工厂自动匹配对应的脱敏策略:
DesensitizeStrategy strategy = DesensitizeStrategyFactory
.getStrategy(desensitizeType);
String desensitized = strategy.desensitize(originalValue);
2. 支持自定义策略
如果内置策略不满足你的需求,可以自定义:
public class MyDesensitizeStrategy implements DesensitizeStrategy {
@Override
public String desensitize(String value) {
// 你的脱敏逻辑
return doDesensitize(value);
}
}
然后在注解里指定:
@Desensitize(strategy = MyDesensitizeStrategy.class)
private String myField;
3. 不影响数据库存储
脱敏只发生在 Jackson 序列化返回给前端的时候,数据库中存储的还是 明文,不影响业务逻辑和查询。如果你需要全程加密存储,可以配合其他加密组件一起使用。
三、代码更新说明
本次更新:
- 新增
forge-starter-social模块,第三方登录核心逻辑 - 新增
forge-starter-crypto模块,包含字段脱敏功能 - 前端新增
socialConfig.vue管理页面 - 登录页面增加第三方登录图标展示
- 新增回调处理页面
callback.vue - 数据库新增
sys_social_config和sys_user_social两张表
SQL 变更文件已经放在:
forge-starter-social/sql/sys_social_config.sql
拉取最新代码后执行一下即可。
git pull origin main
# 执行SQL
# 重启后端
# 重新构建前端
四、为什么选择 ForgeAdmin?
和市面上其他后台框架相比,ForgeAdmin 的核心优势:
| 特性 | ForgeAdmin | 传统框架 |
|---|---|---|
| 微内核架构 | ✅ 真正插件化,内核非常干净 | ❌ 单体所有功能耦合在一起 |
| 动态API | ✅ 运行时配置接口,无需重启 | ❌ 需要改代码重启 |
| 原生集成 Flowable 7 | ✅ 开箱即用的流程能力 | ❌ 需要自己集成 |
| Excel 可视化配置 | ✅ 无需写注解,界面配置 | ❌ 每个字段都要写注解 |
| UnoCSS 原子化CSS | ✅ 开发更快,体积更小 | ❌ 传统预CSS,冗余代码多 |
| RustFS 支持 | ✅ 原生集成分布式文件系统 | ❌ 只支持本地存储 |
现在又新增了第三方登录和字段脱敏两大企业级特性,离「开箱即用」又近了一步。
五、近期计划
接下来我们还会开发:
- 短信邮件服务集成
- 分布式幂等保护
- 租户套餐管理
- S3 对象存储支持
- 更多示例 Demo
如果你对某个功能优先级比较高,欢迎在 Issue 里留言。
六、体验地址
- 项目地址:gitee.com/ForgeLab/fo…
- 在线文档:forgelab.gitee.io/forge-admin…
- 问题反馈:Issues
如果你觉得这个项目对你有帮助,欢迎点个 Star ⭐ 支持一下,这对我真的很重要!
讨论
你在开发中遇到过第三方登录或者字段脱敏的哪些坑?欢迎在评论区交流讨论。
ForgeAdmin - 真正微内核全插件化的Java中后台管理框架项目地址:gitee.com/ForgeLab/fo… Star 关注,欢迎 Fork 参与贡献 😉