java脱敏处理_SpringBoot配置文件脱敏处理
时间: 2024-02-03 12:02:00 浏览: 93
Mybatis+注解轻松实现脱敏
在SpringBoot中,可以通过使用@ConfigurationProperties注解来读取配置文件中的属性值。为了保护敏感信息(如密码),可以对读取到的属性值进行脱敏处理。
一种常见的脱敏处理方式是对字符串进行部分替换,只保留前几位和后几位,中间用*代替。下面是一个例子:
```java
@Component
@ConfigurationProperties(prefix = "myconfig")
public class MyConfig {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@PostConstruct
public void init() {
// 对密码进行脱敏处理
if (StringUtils.isNotBlank(password)) {
int len = password.length();
if (len <= 2) {
password = "**";
} else if (len <= 4) {
password = password.charAt(0) + "**" + password.charAt(len - 1);
} else if (len <= 6) {
password = password.charAt(0) + "**" + password.substring(len - 3, len - 1) + password.charAt(len - 1);
} else {
password = password.charAt(0) + "**" + password.substring(len - 5, len - 1) + password.charAt(len - 1);
}
}
}
}
```
在上面的例子中,我们定义了一个MyConfig类,使用@ConfigurationProperties注解读取配置文件中的属性值,并对密码进行脱敏处理。在init()方法中,我们使用StringUtils类的isNotBlank()方法判断密码是否为空,然后根据密码的长度进行不同的脱敏处理。
需要注意的是,我们对密码进行了修改,但是并没有修改配置文件中的值。如果需要修改配置文件中的值,可以使用Spring的Environment对象进行修改。下面是一个例子:
```java
@Autowired
private Environment environment;
@PostConstruct
public void init() {
// 对密码进行脱敏处理
if (StringUtils.isNotBlank(password)) {
int len = password.length();
if (len <= 2) {
password = "**";
} else if (len <= 4) {
password = password.charAt(0) + "**" + password.charAt(len - 1);
} else if (len <= 6) {
password = password.charAt(0) + "**" + password.substring(len - 3, len - 1) + password.charAt(len - 1);
} else {
password = password.charAt(0) + "**" + password.substring(len - 5, len - 1) + password.charAt(len - 1);
}
// 修改配置文件中的值
environment.getPropertySources().forEach(propertySource -> {
if (propertySource instanceof EnumerablePropertySource) {
String[] propertyNames = ((EnumerablePropertySource) propertySource).getPropertyNames();
for (String propertyName : propertyNames) {
Object value = propertySource.getProperty(propertyName);
if (StringUtils.isNotBlank(value.toString()) && value.toString().equals(password)) {
((StandardEnvironment) environment).getPropertySources()
.addFirst(new MapPropertySource("myConfig", Collections.singletonMap(propertyName, password)));
}
}
}
});
}
}
```
在这个例子中,我们注入了Environment对象,并在init()方法中使用它修改了配置文件中的值。需要注意的是,修改配置文件中的值可能会影响程序的正常运行,因此要慎重考虑。
阅读全文