依赖
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>1.14</version>
</dependency>
<dependency>
加密解密工具类
public class EncryptAndDecryptUtil {
private static Log logger = LogFactory.getLog(EncryptAndDecryptUtil.class);
static String algorithm = PropertiesBean.getInstance().getProperty("system.encryptor.algorithm");
static String salt = PropertiesBean.getInstance().getProperty("system.encryptor.salt");
public static String StandardPBEStringEncryptor(String str){
StandardPBEStringEncryptor standardPBEStringEncryptor =new StandardPBEStringEncryptor();
standardPBEStringEncryptor.setAlgorithm(algorithm);
standardPBEStringEncryptor.setPassword(salt);
return standardPBEStringEncryptor.encrypt(str);
}
public static String StandardPBEStringDecryptor(String str){
StandardPBEStringEncryptor standardPBEStringEncryptor =new StandardPBEStringEncryptor();
standardPBEStringEncryptor.setAlgorithm(algorithm);
standardPBEStringEncryptor.setPassword(salt);
return standardPBEStringEncryptor.decrypt(str);
}
public static void main(String[] args) {
}
}
判断逻辑
public class PropertyDetector implements EncryptablePropertyDetector {
public static final String ENCODED_PASSWORD_HINT = "{mediway}";
// 如果属性的字符开头为"{dhcc}",返回true,表明该属性是加密过的
@Override
public boolean isEncrypted(String s) {
if (null != s) {
return s.startsWith(ENCODED_PASSWORD_HINT);
}
return false;
}
// 该方法告诉工具,如何将自定义前缀去除
@Override
public String unwrapEncryptedValue(String s) {
return s.substring(ENCODED_PASSWORD_HINT.length());
}
}
判断解密
public class PropertyResolver implements EncryptablePropertyResolver {
private static Log logger = LogFactory.getLog(CatalogBlh.class);
//自定义解密方法
@Override
public String resolvePropertyValue(String s) {
if (null != s && s.startsWith(PropertyDetector.ENCODED_PASSWORD_HINT)) {
return EncryptAndDecryptUtil.StandardPBEStringDecryptor(s.substring(
PropertyDetector.ENCODED_PASSWORD_HINT.length()));
}
return s;
}
}
配置类
@Configuration
@EnableEncryptableProperties
public class SysConfig {
@Bean(name = "encryptablePropertyDetector")
public EncryptablePropertyDetector encryptablePropertyDetector() {
return new PropertyDetector();
}
@Bean(name = "encryptablePropertyResolver")
public EncryptablePropertyResolver encryptablePropertyResolver() {
return new PropertyResolver();
}
}
配置文件的数据源示例
spring.datasource.url=jdbc:mysql://XXX:3306/cdbprcs?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username={mediway}AEEjrnViFiij6cUISoELFg==
spring.datasource.password={mediway}lsYrk8pixxe243W9qAcAOqCtp77zqmhM