SpringBoot敏感數(shù)據(jù)脫敏的處理方式
1. 使用注解 + Jackson序列化脫敏
通過自定義注解和Jackson的JsonSerializer
實現(xiàn)數(shù)據(jù)脫敏,適合接口返回敏感數(shù)據(jù)時動態(tài)處理。
實現(xiàn)步驟:
- 定義脫敏策略枚舉
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)的替換規(guī)則,避免敏感信息寫入日志。
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. 數(shù)據(jù)庫加密存儲
使用加密工具(如Jasypt)對敏感字段進行加密存儲。
實現(xiàn)步驟:
- 添加依賴
<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返回結果進行統(tǒng)一脫敏。
- 深度脫敏:處理嵌套對象(如集合、Map中的敏感數(shù)據(jù))。
- 性能優(yōu)化:避免在高頻接口中使用復雜正則匹配。
- 測試驗證:確保脫敏后的數(shù)據(jù)不可逆且符合業(yè)務需求。
總結
根據(jù)場景選擇合適方案:
- 接口脫敏:使用Jackson自定義序列化。
- 日志安全:配置日志替換規(guī)則。
- 存儲安全:數(shù)據(jù)庫字段加密。
- 傳輸安全:啟用HTTPS + 數(shù)據(jù)加密傳輸。
通過組合以上方法,可系統(tǒng)性地保護敏感數(shù)據(jù),滿足GDPR等數(shù)據(jù)安全法規(guī)要求。
以上就是SpringBoot敏感數(shù)據(jù)脫敏的處理方式的詳細內(nèi)容,更多關于SpringBoot數(shù)據(jù)脫敏處理的資料請關注腳本之家其它相關文章!
相關文章
詳解Spring Boot中使用@Scheduled創(chuàng)建定時任務
本篇文章中主要介紹了Spring Boot中使用@Scheduled創(chuàng)建定時任務,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03springboot配置請求超時時間(Http會話和接口訪問)
本文主要介紹了springboot配置請求超時時間,包含Http會話和接口訪問兩種,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-07-07Java實戰(zhàn)項目之校園跑腿管理系統(tǒng)的實現(xiàn)
只有理論是不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+Springboot+vue+maven+elementui+mysql實現(xiàn)一個校園跑腿管理系統(tǒng),大家可以在過程中查缺補漏,提升水平2022-01-01Java高效實現(xiàn)電商產(chǎn)品排序實戰(zhàn)
這篇文章主要為大家介紹了Java高效實現(xiàn)電商產(chǎn)品排序實戰(zhàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11Java使用Hutool執(zhí)行日期的加法和減法操作方法
使用Hutool進行日期的加法和減法操作,可以使用`DateUtil.offsetXXX()`方法來實現(xiàn),這些方法會返回一個新的日期,而不是在原日期上進行修改,本文給大家介紹Java使用Hutool執(zhí)行日期的加法和減法操作方法,感興趣的朋友一起看看吧2023-11-11