ForgeAdmin 更新:新增第三方登录认证 + 数据字段脱敏两大企业级特性

0 阅读6分钟

大家好,我是 ForgeAdmin 的作者。今天给大家带来两个非常实用的企业级特性更新:第三方登录认证数据字段脱敏

项目简介

ForgeAdmin 是一个基于 Spring Boot 3 + Vue 3 的真正 微内核 全插件化中后台管理框架。如果你还不了解,可以先看我之前的介绍文章:《做了一个真正微内核全插件化的Java后台框架,比若依更灵活》

GitHub:github.com/yaomindong1…

欢迎 Star ⭐ 关注项目进展~


一、第三方登录认证

为什么需要第三方登录?

现在的系统几乎都需要支持第三方登录了:

  • 用户可以用微信、GitHub、Gitee 快速登录,不用再注册账号
  • 降低用户登录门槛,提升转化率
  • 企业内部系统可以对接企业微信、钉钉扫码登录

ForgeAdmin 本次更新完整实现了第三方登录认证功能,支持灵活配置多种平台。

支持的第三方平台

目前已经支持以下主流平台:

平台支持状态使用场景
Gitee✅ 已支持开源开发者账号登录
GitHub✅ 已支持GitHub 账号一键登录
微信开放平台✅ 已支持微信扫码登录
企业微信✅ 已支持企业内部系统登录
钉钉✅ 已支持钉钉扫码登录
Google✅ 已支持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. 前端完整实现

前端也已经完整实现:

  • 登录页显示第三方登录图标
  • 点击跳转授权
  • 回调页面处理授权结果
  • 自动获取用户信息并登录

使用方式

  1. 在第三方平台开发者后台创建应用,获取 Client ID 和 Secret
  2. 在 ForgeAdmin 后台「第三方登录配置」添加配置
  3. 配置回调地址(和你第三方平台填写的一致)
  4. 开启配置,刷新前端页面,就能看到登录图标了

整个过程不需要改一行代码,完全可视化配置。


二、数据字段脱敏

为什么需要字段脱敏?

在企业级开发中,数据安全合规越来越重要:

  • 用户手机号、身份证号不能完整返回给前端
  • 日志打印的时候也不能输出明文
  • 满足《个人信息保护法》合规要求
  • 防止内部人员泄露用户隐私

ForgeAdmin 本次新增了基于 Jackson 序列化的字段脱敏功能,使用非常简单。

支持的脱敏类型

一共内置了 10+ 种常用脱敏策略:

脱敏类型原始数据脱敏结果
手机号13800138000138****8000
邮箱example@gmail.come****@gmail.com
身份证110101199001011234110***********1234
姓名张三张*
地址北京市朝阳区XX街道北京市朝阳区********
银行卡62220212345678901236222 **** **** **** 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_configsys_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 里留言。


六、体验地址

如果你觉得这个项目对你有帮助,欢迎点个 Star ⭐ 支持一下,这对我真的很重要!


讨论

你在开发中遇到过第三方登录或者字段脱敏的哪些坑?欢迎在评论区交流讨论。

ForgeAdmin - 真正微内核全插件化的Java中后台管理框架项目地址:gitee.com/ForgeLab/fo… Star 关注,欢迎 Fork 参与贡献 😉