1.依赖:
<!--jasypt加密-->
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>1.16</version>
</dependency>
2.加密工具类
只有加密,解密会自动解,需要jasypt来解密的密文需要用“ENC(…)”括起来
import com.ctrip.framework.apollo.core.utils.StringUtils;
import org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Created by lzh on 2019/1/9.
* Content :加密工具
*/
public class EncryptUtil {
/**
* 制表符、空格、换行符 PATTERN
*/
private static Pattern BLANK_PATTERN = Pattern.compile("\\s*|\t|\r|\n");
/**
* 可以理解为加密salt
*/
private static String PASSWORD = "klklklklklklklkl";
/**
* 加密算法
*/
private static String ALGORITHM = "PBEWithMD5AndDES";
public static Map getEncryptedParams(String input) {
//输出流
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(1024);
PrintStream cacheStream = new PrintStream(byteArrayOutputStream);
//更换数据输出位置
System.setOut(cacheStream);
//加密参数组装
String[] args = {"input=" + input, "password=" + PASSWORD, "algorithm=" + ALGORITHM};
JasyptPBEStringEncryptionCLI.main(args);
//执行加密后的输出
String message = byteArrayOutputStream.toString();
String str = replaceBlank(message);
int index = str.lastIndexOf("-");
//返回加密后的数据
Map result = new HashMap();
result.put("input", "ENC("+str.substring(index + 1)+")");
result.put("password", PASSWORD);
return result;
}
public static void main(String[] args) {
System.out.println(getEncryptedParams("123456"));//print : {input=Ore69lUopDHL5R8Bw/G3bQ==, password=klklklklklklklkl}
}
/**
* 替换制表符、空格、换行符
*
* @param str
* @return
*/
private static String replaceBlank(String str) {
String dest = "";
if (!StringUtils.isEmpty(str)) {
Matcher matcher = BLANK_PATTERN.matcher(str);
dest = matcher.replaceAll("");
}
return dest;
}
}
运行:
3.测试
将2中加密的密码(每次都不一样),放到apollo中。
3.1测试controller。
3.2也可以看控制台打印出来的是不是123456
@MapperScan({"com.ohaotian.tydic.apollotest.dao"})
@Configuration
@EnableApolloConfig
@SpringBootApplication
public class ApolloTestApplication implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(ApolloTestApplication.class, args);
}
@Value("${spring.datasource.password}")
private String password;
@Override
public void run(String... args) throws Exception {
System.out.println("password: "+password);
}
// 继承SpringBootServletInitializer 实现configure 方便打war 外部服务器部署。 extends SpringBootServletInitializer
// @Override
// protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
// return application.sources(ApolloTestApplication.class);
// }
}