SpringBoot如何對密碼等敏感信息進行脫敏處理
?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)
啟動時指定密鑰:
java -jar your-app.jar --jasypt.encryptor.password=your-secret-key
(2) 自定義屬性源(實現(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>
自定義轉換器:
public class MaskingPatternLayout extends PatternLayout { @Override public String doLayout(ILoggingEvent event) { String message = super.doLayout(event); return message.replaceAll("password\":\"(.*?)\"", "password\":\"?**?*?**?*\""); } }
?3. API響應脫敏?
(1) 使用Jackson注解忽略敏感字段
public class UserDTO { private String username; @JsonIgnore // 完全忽略該字段 private String password; @JsonProperty(access = Access.WRITE_ONLY) // 僅允許寫入,響應時不序列化 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. 其他注意事項?
?環(huán)境變量?:優(yōu)先使用環(huán)境變量傳遞敏感信息,而非明文配置文件:
export SPRING_DATASOURCE_PASSWORD=your_password
?安全存儲密鑰?:加密密鑰(如Jasypt的密鑰)應通過安全渠道(如KMS、Vault)管理,避免硬編碼。
?代碼審查?:避免在代碼中硬編碼密碼,使用.gitignore排除敏感配置文件。
?總結?
通過配置文件加密(如Jasypt)、日志脫敏(Logback替換)和API響應控制(Jackson注解),可全方位保護敏感信息。建議結合多種方案,確保密碼在存儲、傳輸和展示時均處于脫敏狀態(tài)。
到此這篇關于SpringBoot如何對密碼等敏感信息進行脫敏處理的文章就介紹到這了,更多相關SpringBoot敏感信息脫敏處理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot項目中建議關閉Open-EntityManager-in-view原因
這篇文章主要為大家解析了在Spring Boot項目中建議關閉Open-EntityManager-in-view的原因示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-02-02實戰(zhàn)分布式醫(yī)療掛號系統(tǒng)之設置微服務搭建醫(yī)院模塊
這篇文章主要為大家介紹了實戰(zhàn)分布式醫(yī)療掛號系統(tǒng)之搭建醫(yī)院設置微服務模塊,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-04-04SpringBoot用實體接收Get請求傳遞過來的多個參數(shù)的兩種方式
本文主要介紹SpringBoot用實體接收Get請求傳遞過來的多個參數(shù),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-04-04java使用stream判斷兩個list元素的屬性并輸出方式
這篇文章主要介紹了java使用stream判斷兩個list元素的屬性并輸出方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06