在 Spring Boot 结合 MyBatis 的项目中,实现字段脱敏(如手机号、身份证号、银行卡号等敏感信息的部分隐藏)可以通过以下方案实现

在 Spring Boot 结合 MyBatis 的项目中,实现字段脱敏(如手机号、身份证号、银行卡号等敏感信息的部分隐藏)可以通过以下方案实现。以下是分步说明和完整代码示例:


一、实现方案选择

1. 方案一:自定义注解 + Jackson 序列化脱敏
  • 适用场景:数据返回给前端时动态脱敏,数据库存储原始数据。
  • 优点:无侵入性,通过注解灵活控制脱敏字段,与业务逻辑解耦。
  • 核心实现:利用 Jackson 的 JsonSerializer 自定义序列化逻辑。
2. 方案二:MyBatis 类型处理器(TypeHandler)
  • 适用场景:数据库存储时加密或脱敏,查询时解密。
  • 优点:数据存储层直接处理,安全性高。
  • 缺点:需处理加解密逻辑,可能影响查询性能。
3. 方案三:AOP 拦截 Service 层返回结果
  • 适用场景:在业务层统一处理敏感字段。
  • 优点:集中控制脱敏逻辑。
  • 缺点:需遍历对象树,性能开销较大。

二、推荐方案一:Jackson 动态脱敏(完整代码)

1. 定义脱敏策略注解
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Sensitive {
   
    /**
     * 脱敏策略类型
     */
    SensitiveStrategy strategy();
}
2. 定义脱敏策略枚举
public enum SensitiveStrategy {
   
    /**
     * 手机号脱敏(保留前3后4位)
     */
    PHONE(s -> s.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2")),

    /**
     * 身份证脱敏(保留前1后4位)
     */
    ID_CARD(s -> s.replaceAll("(\\d{1})\\d{13}(\\d{4})", "$1*************$2")),

    /**
     * 银行卡脱敏(保留前6后4位)
     */
    BANK_CARD(s -> s.replaceAll("(\\d{6})\\d{9}(\\d{4})", "$1*********$2"));

    private final Function
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值