V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhongpingjing
V2EX  ›  Java

关于 springboot,在启动时解密配置文件密码问题

  •  
  •   zhongpingjing · 2023-04-04 15:50:01 +08:00 · 1899 次点击
    这是一个创建于 632 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在 application.properties 里面有一个以下的属性

    spring.cloud.nacos.password=密文
    dubbo.registry.parameters.password=密文
    

    百度查询在 springboot 可以通过继承 EnvironmentPostProcessor 接口来重写配置文件的属性,代码:

    @SneakyThrows
    @Override
    public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
        String dubboPassword = environment.getProperty("dubbo.registry.parameters.password");
        String nacosPassword = environment.getProperty("spring.cloud.nacos.password");
        dubboPassword = AESHelper.AESDecrypt(dubboPassword, BaseRSAUtils.getDefaultPublicKey());
        nacosPassword = AESHelper.AESDecrypt(nacosPassword, BaseRSAUtils.getDefaultPublicKey());
        Properties properties = new Properties();
        properties.setProperty("dubbo.registry.parameters.password", dubboPassword);
        properties.setProperty("spring.cloud.nacos.password", nacosPassword);
        MutablePropertySources propertySources = environment.getPropertySources();
        propertySources.addFirst(new PropertiesPropertySource("nacos-properties", properties));
    }
    

    启动的时候,发生 nacos 会直接报错密码错误,现在猜测是 nacos 建立链接是在解密代码之前。dubbo 可以正常解密。想问一下应该怎么做,才能在 nacos 建立连接之前把配置文件进行解密

    11 条回复    2023-04-06 10:36:13 +08:00
    menghechina
        1
    menghechina  
       2023-04-04 16:19:00 +08:00
    org.springframework.boot.env.EnvironmentPostProcessor=你的类 ,写了吗,我的还实现了 Ordered ,但是把它设置成 Ordered.LOWEST_PRECEDENCE ,忘记为啥了
    termux
        2
    termux  
       2023-04-04 16:19:32 +08:00
    如果猜测是顺序问题,可以调整一下 EnvironmentPostProcessor 的优先级(加 @Order 注解或者实现 org.springframework.core.Ordered 接口)


    个人比较推荐使用现成的开源库,网上教程挺多的:
    https://github.com/ulisesbocchio/jasypt-spring-boot
    zhongpingjing
        3
    zhongpingjing  
    OP
       2023-04-04 16:25:37 +08:00
    @menghechina 这个写了
    zhongpingjing
        4
    zhongpingjing  
    OP
       2023-04-04 16:31:34 +08:00
    @menghechina
    @termux 应该是顺序问题,加了 Ordered ,设置 Ordered.HIGHEST_PRECEDENCE ,会拿不到配置文件的密文,都是 null ;设置 Ordered.LOWEST_PRECEDENCE ,还是会继续报 nacos 链接问题
    zhongpingjing
        5
    zhongpingjing  
    OP
       2023-04-04 16:31:58 +08:00
    @termux 现在项目没办法再引入其他库了。。
    menghechina
        6
    menghechina  
       2023-04-04 16:48:21 +08:00
    @Component 是不是要加一下
    termux
        7
    termux  
       2023-04-04 16:48:40 +08:00
    @zhongpingjing 感觉不用太高也不用太低,看 Jasypt 源码设置的是 Ordered.LOWEST_PRECEDENCE - 100 ,要不你试下看看,还不行的话就慢慢调整下这个值

    https://github.com/ulisesbocchio/jasypt-spring-boot/blob/fc0ef8f1e77edfef4ee6494524d348e7aafbe39c/jasypt-spring-boot/src/main/java/com/ulisesbocchio/jasyptspringboot/configuration/EncryptablePropertySourceBeanFactoryPostProcessor.java#L169
    zhongpingjing
        8
    zhongpingjing  
    OP
       2023-04-04 17:07:41 +08:00
    @termux 引入了 Jasypt 试了一下,也解密不了 nacos 的密码。。
    termux
        9
    termux  
       2023-04-04 17:32:34 +08:00
    @zhongpingjing 啊不会吧,密码是配置的 ENC(xxx)吗,我之前整合 Jasypt 和 Nacos 的时候没啥问题- -
    choice4
        10
    choice4  
       2023-04-04 19:30:36 +08:00 via iPhone
    试试 bootstrap.properties
    zhongpingjing
        11
    zhongpingjing  
    OP
       2023-04-06 10:36:13 +08:00
    @termux 感觉可能是我们项目有些配置干扰的问题。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1013 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 22:09 · PVG 06:09 · LAX 14:09 · JFK 17:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.