apollo脱敏处理(八)

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);
//    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42412601/article/details/88421048