SpringBoot如何對密碼等敏感信息進(jìn)行脫敏處理
?1. 配置文件敏感信息脫敏?
(1) 使用加密庫(如Jasypt)
步驟?:
添加依賴:
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
加密密碼:
BasicTextEncryptor encryptor = new BasicTextEncryptor();
encryptor.setPassword("your-secret-key"); // 加密密鑰
String encryptedPassword = encryptor.encrypt("your-real-password");
在配置文件中使用加密值(用ENC()包裹):
spring:
datasource:
password: ENC(encryptedPassword)
啟動時(shí)指定密鑰:
java -jar your-app.jar --jasypt.encryptor.password=your-secret-key
(2) 自定義屬性源(實(shí)現(xiàn)PropertySource)
public class MaskedPropertySource extends PropertySource<Map<String, Object>> {
public MaskedPropertySource(String name, Map<String, Object> source) {
super(name, source);
}
@Override
public Object getProperty(String name) {
Object value = source.get(name);
if (name.contains("password") && value != null) {
return "?**?*?**?*"; // 返回脫敏值
}
return value;
}
}
?2. 日志脫敏?
(1) 使用Logback的replace功能
在logback-spring.xml中配置脫敏規(guī)則:
<configuration>
<conversionRule conversionWord="maskedMsg" converterClass="com.example.MaskingPatternLayout"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %maskedMsg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="CONSOLE" />
</root>
</configuration>
自定義轉(zhuǎn)換器:
public class MaskingPatternLayout extends PatternLayout {
@Override
public String doLayout(ILoggingEvent event) {
String message = super.doLayout(event);
return message.replaceAll("password\":\"(.*?)\"", "password\":\"?**?*?**?*\"");
}
}
?3. API響應(yīng)脫敏?
(1) 使用Jackson注解忽略敏感字段
public class UserDTO {
private String username;
@JsonIgnore // 完全忽略該字段
private String password;
@JsonProperty(access = Access.WRITE_ONLY) // 僅允許寫入,響應(yīng)時(shí)不序列化
private String secretKey;
}
(2) 自定義序列化器
public class PasswordSerializer extends JsonSerializer<String> {
@Override
public void serialize(String value, JsonGenerator gen, SerializerProvider provider)
throws IOException {
gen.writeString("?**?*?**?*"); // 返回固定脫敏值
}
}
// 在DTO字段上指定序列化器
public class UserResponse {
@JsonSerialize(using = PasswordSerializer.class)
private String password;
}
?4. 其他注意事項(xiàng)?
?環(huán)境變量?:優(yōu)先使用環(huán)境變量傳遞敏感信息,而非明文配置文件:
export SPRING_DATASOURCE_PASSWORD=your_password
?安全存儲密鑰?:加密密鑰(如Jasypt的密鑰)應(yīng)通過安全渠道(如KMS、Vault)管理,避免硬編碼。
?代碼審查?:避免在代碼中硬編碼密碼,使用.gitignore排除敏感配置文件。
?總結(jié)?
通過配置文件加密(如Jasypt)、日志脫敏(Logback替換)和API響應(yīng)控制(Jackson注解),可全方位保護(hù)敏感信息。建議結(jié)合多種方案,確保密碼在存儲、傳輸和展示時(shí)均處于脫敏狀態(tài)。
到此這篇關(guān)于SpringBoot如何對密碼等敏感信息進(jìn)行脫敏處理的文章就介紹到這了,更多相關(guān)SpringBoot敏感信息脫敏處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
tk.mybatis實(shí)現(xiàn)uuid主鍵生成的示例代碼
本文主要介紹了tk.mybatis實(shí)現(xiàn)uuid主鍵生成的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12
Java中Future和FutureTask的示例詳解及使用
Java中的Future和FutureTask通常和線程池搭配使用,用來獲取線程池返回執(zhí)行后的返回值,下面這篇文章主要給大家介紹了關(guān)于Java中Future和FutureTask使用的相關(guān)資料,需要的朋友可以參考下2021-11-11
SpringMVC獲取HTTP中元素的實(shí)現(xiàn)示例
本文主要介紹了SpringMVC獲取HTTP中的元素,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02
java并發(fā)編程專題(十一)----(JUC原子類)數(shù)組類型詳解
這篇文章主要介紹了JAVA JUC原子類 數(shù)組類型詳解的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07
java基于AES對稱加密算法實(shí)現(xiàn)的加密與解密功能示例
這篇文章主要介紹了java基于AES對稱加密算法實(shí)現(xiàn)的加密與解密功能,結(jié)合完整實(shí)例形式分析了AES對稱加密算法的定義與使用技巧,需要的朋友可以參考下2017-01-01
SpringCloud 服務(wù)負(fù)載均衡和調(diào)用 Ribbon、OpenFeign的方法
這篇文章主要介紹了SpringCloud 服務(wù)負(fù)載均衡和調(diào)用 Ribbon、OpenFeign的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
SpringCloud如何引用xxjob定時(shí)任務(wù)
Spring?Cloud?本身不直接支持?XXL-JOB?這樣的定時(shí)任務(wù)框架,如果你想在?Spring?Cloud?應(yīng)用中集成?XXL-JOB,你需要手動進(jìn)行配置,本文給大家介紹SpringCloud如何引用xxjob定時(shí)任務(wù),感興趣的朋友一起看看吧2024-04-04

