开发者

SpringBoot敏感数据脱敏的处理方式

开发者 https://www.devze.com 2025-03-15 12:28 出处:网络 作者: Su米苏
目录1. 使用注解 + Jackson序列化脱敏实现步骤:2. 日志脱敏处理Logback配置示例(通过正则替换):自定义转换器:3. 数据库加密存储实现步骤:4. 其他注意事项总结1. 使用注解 + Jackson序列化脱敏
目录
  • 1. 使用注解 + Jackson序列化脱敏
    • 实现步骤:
  • 2. 日志脱敏处理
    • Logback配置示例(通过正则替换):
    • 自定义转换器:
  • 3. 数据库加密存储
    • 实现步骤:
  • 4. 其他注意事项
    • 总结

      1. 使用注解 + Jackson序列化脱敏

      通过自定义注解和Jackson的jsonSerializer实现数据脱敏,适合接口返回敏感数据时动态处理。

      实现步骤:

      • 定义脱敏策略枚举
      public enum SensitiveStrategy {
          // 不同脱敏策略
          USERNAME(s -> s.replaceAll("(.).", "$1**")),
          PHONE(s -> s.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2")),
          ID_CARD(s -> s.replaceAll("(\\d{4})\\d{10}(\\d{4})", "$1****$2"));
      
          private final Function<String, String> desensitizer;
      
          SensitiveStrategy(Function<String, String> desensitizer) {
              this.desensitizer = desensitizer;
          }
      
          public Function<String, String> getDesensitizer() {
              return desensitizer;
          }
      }
      
      • 自定义脱敏注解
      @Retention(RetentionPolicy.RUNTIME)
      @JacksonAnnotationsInside
      @JsonSerialize(using = SensitiveSerialize.class)
      public @interface Sensitive {
          SensitiveStrategy strategy();
      }
      
      • 自定义序列化器
      public class SensitiveSerialize extends JsonSerializer<String> {
          private SensitiveStrategy strategy;
      
          public SensitiveSerialize(SensitiveStrategy strategy) {
              this.strategy = strategy;
          }
      
          @Override
          public void serialize(String value, JsonGenerjavascriptator gen, SerializerProvider provider) throws IOException {
              gen.writeString(strategy.getDesensitizer().apply(value));
          }
      }
      
      • 在DTO字段上使用注解
      public class UserDTO {
          @Sensitive(strategy = SensitiveStrategy.PHONE)
          private String phone;
      
          @Sensitive(strategy = SensitiveStrategy.ID_CARD)
          private String idCard;
      }
      

      2. 日志脱敏处理

      使用日志框架(如Logback或Log4j2)的替换规则,避免敏感信息写入日志。

      Logback配置示例(通过正则替换):

      <configuration>
          <conversionRule conversionWord="msg"qzgSUUPLd converterwww.devze.comClass="com.example.LogMaskConverter"/>
      </configuration>
      

      自定义转换器:

      public class LogMaskConverter extendjss ClassicConverter {
          @Override
          public String convert(ILoggingEvent event) {
              return event.getMessage()
                  .replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2") // 手机号
                  .replaceAll("(\\d{4})\\d{10}(\\d{4})", "$1****$2"); // 身份证
          }
      }
      

      3. 数据库加密存储

      使用加密工具(如Jasypt)对敏感字段进行加密存储。

      实现步骤:

      • 添加依赖
      <dependency>
          <groupId>com.github.ulisesbocchio</groupId>
          <artifactId>jasypt-spring-boot-starter</artifactId>
          <version>3.0.5</version>
      </dependency>
      
      • 配置加密密钥
      jasypt.encryptor.password=your_secret_key
      
      • 在实体类中使用加密注解
      public class User {
          @Encrypted
          private String phone;
      
          @Encrypted
          private String idCard;
      }
      

      4. 其他注意事项

      • 全局性处理:结合AOP对所有Controller返回结果进行统一脱敏。
      • 深度脱敏:处理嵌套对象(如集合、Map中的敏感数据)。
      • 性能优化:避免在高频接口中使用复杂正则匹配。
      • 测试验证:确保脱敏后的数据不可逆且符合业务需求。

      总结

      根据场景选择合适方案:

      • 接口脱敏:使用Jackson自定义序列化。
      • 日志安全:配置日志替换规则。
      • 存储安全:数据库字android段加密。
      • 传输安全:启用HTTPS + 数据加密传输。

      通过组合以上方法,可系统性地保护敏感数据,满足GDPR等数据安全法规要求。

      以上就是SpringBoot敏感数据脱敏的处理方式的详细内容,更多关于SpringBoot数据脱敏处理的资料请关注编程客栈(www.devze.com)其它相关文章!

      0

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      关注公众号