主页 > 互联网  > 

SpringBoot敏感数据脱敏怎么处理

SpringBoot敏感数据脱敏怎么处理

在Spring Boot中处理敏感数据脱敏,可以通过以下几种方式实现,确保敏感信息在接口返回、日志输出、数据库存储等环节得到保护:


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, JsonGenerator 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" converterClass="com.example.LogMaskConverter"/> </configuration>

自定义转换器:

public class LogMaskConverter extends 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自定义序列化。日志安全:配置日志替换规则。存储安全:数据库字段加密。传输安全:启用HTTPS + 数据加密传输。

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

标签:

SpringBoot敏感数据脱敏怎么处理由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“SpringBoot敏感数据脱敏怎么处理