首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从Quarkus配置属性读取加密值?

Quarkus 是一款开源的 Java 框架,专注于优化和简化构建云原生应用程序。在 Quarkus 中,可以通过配置属性来读取加密值。下面是从 Quarkus 配置属性读取加密值的步骤:

  1. 首先,需要在项目的配置文件(例如 application.properties 或 application.yml)中定义加密值的占位符,例如:
代码语言:txt
复制
myapp.secret=ENC(${myapp.secret.encrypted})

这里的 ${myapp.secret.encrypted} 是加密值的占位符。

  1. 接下来,需要创建一个 Quarkus 扩展来处理加密属性的解密操作。可以使用 Quarkus Extension API 创建一个自定义的扩展。
  2. 在自定义扩展中,需要实现 RuntimeValue 接口,并重写 getValue 方法来解密加密属性。例如:
代码语言:txt
复制
@ApplicationScoped
public class EncryptedValueProvider implements RuntimeValue<String> {
    private String decryptedValue;

    public EncryptedValueProvider(@ConfigProperty(name = "myapp.secret.encrypted") String encryptedValue) {
        this.decryptedValue = decrypt(encryptedValue); // 解密操作
    }

    @Override
    public String getValue() {
        return decryptedValue;
    }

    private String decrypt(String encryptedValue) {
        // 解密逻辑,使用相关算法解密加密值
        // 注意:在实际生产环境中,请使用安全的加密算法和密钥管理来保护加密值
    }
}

在这个例子中,EncryptedValueProvider 类使用 @ConfigProperty 注解来注入加密属性的占位符,然后在构造函数中进行解密操作,并在 getValue 方法中返回解密后的值。

  1. 最后,需要在 Quarkus 应用程序的入口类中注册自定义的扩展。可以使用 @Recorder 注解将扩展与应用程序绑定,例如:
代码语言:txt
复制
@Recorder
public class EncryptedValueRecorder {
    public void registerEncryptedValueProvider(RuntimeValue<String> encryptedValue) {
        // 在这里将自定义的解密值提供者注册到应用程序
        // 这样在其他地方可以使用 @Inject 来注入解密后的值
    }
}

在这个例子中,EncryptedValueRecorder 类使用 @Recorder 注解标记,并定义了一个 registerEncryptedValueProvider 方法,用于注册解密值的提供者。

完成上述步骤后,就可以在 Quarkus 应用程序的其他组件中使用 @Inject 注解来注入解密后的加密值,例如:

代码语言:txt
复制
@Inject
@MyAppSecret
String secret;

在这个例子中,@MyAppSecret 是一个自定义的限定符,用于注入解密后的值。

需要注意的是,上述步骤是一种自定义的解决方案,具体实现可能因项目需求而异。如果您想了解更多关于 Quarkus 配置属性读取加密值的详细信息以及 Quarkus 提供的其他功能和产品,可以参考腾讯云的 Quarkus 相关文档和产品介绍页面:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【说站】Springboot如何yml或properties配置文件中获取属性

=a,bc,cperson.dog.name=xiaogouperson.dog.age=2 @Value 获取配置文件的 package com.sunchao.demo.bean;import ...java.util.Date;import java.util.List;import java.util.Map;/** * @author sunyc * @create 2022-04-24 9:43 *///将配置文件中的映射到...person中//@ConfigurationProperties 告诉springboot将本类中的所有属性配置文件中相关的属性配置//这个组件是容器中的组件,才能提供功能加@Component注解...ConfigurationProperties(prefix = "person")@Validated//数据校验public class Person {//@Email@Value("${person.name}")//properties...配置文件中获取值String name;@Value("${person.age}") //properties配置文件中获取值int age;@Value("${person.birth}")//

7.9K10
  • 外部配置属性如何被绑定到XxxProperties类属性上的?--SpringBoot源码(五)

    这两个注解,来探究下外部配置属性如何被绑定到@ConfigurationProperties注解的类属性中的?...我们再来看下ConfigurationPropertiesBinder这个配置属性绑定器对象是如何构造的。...配置属性,注意这里的属性源是由ConfigFileApplicationListener这个监听器负责读取的,ConfigFileApplicationListener将会在后面源码分析章节中详述。...接下来我们紧跟主线,再来看下外部配置属性如何绑定到@ConfigurationProperties注解的XxxProperties类属性上的呢?...9 小结 好了,外部配置属性如何被绑定到XxxProperties类属性上的源码分析就到此结束了,又是蛮长的一篇文章,不知自己表述清楚没,重要步骤现总结下: 首先是@EnableConfigurationProperties

    3.7K01

    quarkus实战之七:使用配置

    quarkus应用,今天要练习的是如何使用这些配置信息 整篇文章由以下内容构成: 创建工程,作为演示使用配置项操作的代码 演示最基本的使用配置项操作 展示配置项不存时会导致什么问题 演示如何设置默认,...,简化多级的相同前缀配置项 用map接受配置信息(减少配置项相关代码量) quarkus及其扩展组件的内置配置项 接下来创建demo工程开始吧 演示代码 创建一个demo工程,参考下面的命令,这样的工程会自带一个...defaultValue的123改为xxx,此时应用启动就会失败,因为“xxx”转为int的过程中抛出了异常,如下图: 除了上面试过的int,还有很多种类型都支持defaultValue的字符串被自动转换...注解提供了namingStrategy的属性,其有三种,分别对应上述三种命名风格,您根据自身情况选用即可 KEBAB_CASE(默认):减号分隔的配置项转为驼峰命令的方法,配置项student-number...作为配置项的前缀,因为目前quarkus框架及其插件们的配置项的前缀都是quarkus,应用开发应该避免和框架使用相同的配置项前缀,以免冲突 至此,咱们已经学习了如何quarkus应用中使用配置项,

    1.1K30

    Quarkus的ConfigSourceInterceptor实现加密配置(5)

    所以研究了下怎么在Quarkus中实现类似的配置加密功能。...在前文《Quarkus集成apollo配置中心》中,已经有介绍过Quarkus中的配置架构了,配置加密功能也是基于smallrye-config来实现。...指定优先级时,value越小,优先级越高,这里指定为PLATFORM早期拦截,代码如下: /** * 1、使用方式为 正常配置的前面拼接Encrypt=>字符串,如 * quarkus.datasource.password...使用时先配置加密的key,在application.properties中添加如下配置: config.encrypt.aeskey = xxxxxxxxxxxxxx 配置一定要16位,然后将需要加密...,使用AesEncyptUtil.encrypt(final Object plaintext, String key)方法先得到加密,然后做如下配置,以数据库密码为例: quarkus.datasource.username

    25720

    基于redis的Quarkus分布式锁框架扩展开源了(21)

    前言 类似的分布式锁框架封装,之前写过spring boot版本的,这次的quarkus版本功能上来说没啥区别,都是以注解的方式驱动的,提供了分布式锁,以及业务key粒度的锁定。... 2、添加配置 quarkus.klock=true quarkus.klock.redis.database=12 quarkus.klock.redis.password...= true]配置手动将其打开。...扩展以添加注解的方式驱动,@klock表示给这个方法加上了一把分布式锁,锁的名称为:(默认:全类名+方法名,通过name属性指定)+指定的业务Key。...如果入参是对象,可以用fieldName指定获取对象中的某个属性作为业务Key,如上代表使用user对象里的name属性作为业务Key。相同的业务Key就会上锁,不同的业务key就放行

    18220

    quarkus依赖注入之三:用注解选择注入bean

    文件夹下,如下图红框 quarkus-tutorials是个父工程,里面有多个module,本篇实战的module是basic-di,如下图红框 LookupIfProperty,配置项的符合要求才能使用...bean LookupIfProperty的意思是配置项的符合要求才会创建bean,而LookupUnlessProperty恰好相反,意思是配置项的不符合要求才能使用bean 为了验证LookupUnlessProperty...,属性也改为service.alpha.enabled,现在的逻辑是:如果属性service.alpha.enabled的是true,就执行tryLookupIfPropertyAlpha,如果属性service.alpha.enabled...不存在会如何,咱们将setUp方法中的System.setProperty这段代码删除,这样配置项service.alpha.enabled就不存在了,再次执行单元测试,发现SelectBeanConfiguration...TryIfBuildProfileDefault(); } 再来试试DefaultBean的是否正常,修改SelectBeanConfiguration.java的代码,如下图红框,将IfBuildProfile注解的刚才的

    69140

    quarkus实战之三:开发模式(Development mode)

    ,把代码改成下面这样,注意注解ConfigProperty的作用是将指定配置注入修饰的成员变量中: package com.bolingcavalry; import org.eclipse.microprofile.config.inject.ConfigProperty...: # 这是一个自定义属性 greeting.message=message from configuration 用命令mvn quarkus:dev将应用以开发模式启动,用浏览器访问http://localhost...:8080/actions,响应如下图,符合预期,配置属性可以被正常使用: 现在去修改代码,如下图红框: 再把文件application.properties中的配置也改了,我这里改成了abcdef...上如何操作吧 在开发模式下,断点功能是默认开启的,不过为了安全起见,quarkus断点只监听了localhost网卡,端口是5005 在代码中打个断点,如下图,我这里用的是IDEA: 在IDEA上新增一个断点...:dev命令就行不通了,那又该如何处理呢?

    80931

    quarkus依赖注入之十一:拦截器高级特性上篇(属性设置和重复使用)

    这就牵扯到一个知识点:拦截器属性,拦截器自己是个注解,而注解是有属性的,咱们新增一个通知类型的属性(名为sendType),只要在使用注解的地方配置sendType,然后在拦截器实现中获取到sendType...的,就解决了通知类型的设置和获取的问题,业务需求2和3也就迎刃而解了,拦截器配置的效果大致如下 @ApplicationScoped @SendMessage(sendType="sms") public...,用来放置重复的注解,这里的容器是SendMessageList 使用Repeatable修饰SendMessage,这样就能在同一位置重复使用SendMessage注解了,注意Repeatable的属性是容器...SendMessageList sendType是注解属性,用来保存通知类型,任何使用SendMessage注解的地方都能通过设置sendType来指定通知类型,如果不指定则使用默认sms 要注意sendType...} } 上述代码,有以下几处需要注意 发送短信和邮件不是本篇的重点,因此,对应的sendSms和sendEmail方法中只是日志打印,表示代码已经走到了此处 getAllTypes方法是重点,演示了如何拦截器上下文对象

    64530

    quarkus数据库篇之四:本地缓存

    (意思就是现在整个方案都不稳定) 实用的功能与摇摆不定的官方态度夹杂在一起,注定了本文不会展开细节,大家随我一道了解quarkus的缓存怎么用、效果如何,这就够了,主要分为以下四部分 新建一个子工程,写好未使用缓存的数据库查询代码...里存放公共配置,例如数据库类型,而application-xxx.properties里面是和各个profile环境有关的配置项,例如数据库IP地址、账号密码等,如下图 application.properties...city = new City("ShenZhen"); cityService.create(city); // 由于是第一次新增,所以ID应该等于自增ID的起始...cities.size()); } 单元测试效果如下图,红框显示,没有使用缓存时,一万次自定义SQL查询需要1分钟零5秒 然后是本篇的第二个重点:给SQL查询增加缓存,方法如下图红框,增加hints属性...中读取的数据因为是本地缓存,所以还是更新前的数据 至此,quarkus数据库本地缓存的现有方案,咱们已全部完成了,希望本文能给您一些参考,协助您提升应用性能

    65120

    quarkus实战之六:配置

    ,而不是硬编码(hard code) 与配置有关的知识点不少,本文重点是如何设置,下一篇会详细说明如何使用配置 本篇要学习和掌握的内容:先实践六种具体的配置方式,例如通过在系统变量、application.properties...-1.0-SNAPSHOT-runner.jar 如下图,可以成功获取属性 方式二:Environment variables 在设置环境变量时,要注意转换规则:全大写、点号变下划线,因此greeting.message...配置项的可以引用其他配置项,如下所示,greeting.message的由两部分拼接而成:固定的hello, 、以及配置项greeting.name的,表达式的格式是${配置项名称:配置项找不到时的默认...xxxxxx能否生效,如下图,在找不到配置项greeting.message的时候,咱们配置的默认已经生效了 配置内容:UUID 当同一个应用同时在多个机器上运行时,如何让每个进程有个独立的身份...,会详细说明如何在代码中使用这些配置

    1.1K20

    quarkus实战之八:profile

    ,咱们对配置有了足够了解,但问题也随之而来:如何让应用以最小的改动同时运行在不同环境(如本地、测试、生产等) 举个例子,下面是个简化版配置文件,有两个配置项,第一个固定不变,第二个随环境变化各不相同:...# 这个配置信息在各个环境中都是相同的 greeting.message=hello # 这个配置信息在各个环境中都不一样 quarkus.http.port=9090 在实际部署的时候,如何达到要求呢...就去找parent profile的配置,于是找到了%common.quarkus.http.port,所以为9090 对于配置quarkus.http.ssl-port,由于找到了%dev.quarkus.http.ssl-port...,所以为9443 对于配置quarkus.http.port,如果%dev.quarkus.http.port和%common.quarkus.http.port都不存在,会用quarkus.http.port...prod 如果您想让默认prod变为其他,可以在构建的时候用-Dquarkus.profile去改变它,例如下面这个命令,jar包生成后,启动的时候默认profile是prod-aws mvn clean

    76820

    quarkus实战之四:远程热部署

    答案是可以,接下来咱们一起实战如何远程调试quarkus应用 牢记来自官方的警告 如下图红框所示,来自官方的警告咱们一定要牢记在心,远程热部署功能有巨大安全隐患,不要用在生产环境: 在服务器上的运行方式..." 为了演示修改配置文件也能立即生效的效果,把HobbyResource.java改成下面这样,注意注解ConfigProperty的作用是将指定配置注入修饰的成员变量中: package com.bolingcavalry...,每个配置的作用请看注释: # 这是一个自定义属性,在业务代码中使用ConfigProperty注解取得其 greeting.message=message from configuration #...,且为true,这是开启远程热部署的关键: docker run \ -i \ --rm \ -p 8080:8080 \ -e QUARKUS_LAUNCH_DEVMODE=true \ bolingcavalry...application.properties,将greeting.message的改为aaabbb 修改过后,不会立即同步,需要再次调用web接口才会触发同步,去刷新浏览器,如下图,发现本地修改的配置文件已经同步到服务器

    55920

    quarkus依赖注入之九:bean读写锁

    e.printStackTrace(); } return accountBalance; } /** * 模拟了一次充值操作, * 将账号余额读取到本地变量...,每读一次就等待50毫秒 new Thread(() -> { for (int i=0;i<COUNT;i++) { // 读取账号余额...经验丰富的您应该想到了多种解决方式,例如下面这五种都可以: 用传统的synchronized关键字修饰三个方法 java包的读写锁 deposit和deduct方法内部,不要使用临时变量tempValue,将余额的类型int...来看看Lock注解源码,很简单的几个属性,要重点注意的是:默认属性为Type.WRITE,也就是写锁,被Lock修饰后,锁类型有三种选择:读锁,写锁,无锁 @InterceptorBinding @Inherited...the behavior defined by a class-level interceptor binding. */ NONE } } 接下来看看如何

    48530

    quarkus依赖注入之四:选择注入bean的高级手段

    Named注解,修改HelloQualifierA,如下图红框,将@MyQualifier(“”)换成@Named(“A”),重点关注Named注解的属性,这里等于A 接下来修改注入处的代码,如下图红框...至此,详细您已经知道了Named注解的作用:功能与前面的Qualifier修饰符一样,不过bean的定义和注入处的匹配逻辑是Named注解的属性 以上就是修饰符匹配的全部内容 根据优先级选择 使用优先级来选择注入是一种简洁的方式...,其核心是用Alternative和Priority两个注解修饰所有备选bean,然后用Priority的属性(int型)作为优先级,该越大代表优先级越高 在注入位置,quarkus会选择优先级最高的...return this.getClass().getSimpleName(); } } HelloPriority的第二个实现类HelloPriorityB,可见Priority属性是...return this.getClass().getSimpleName(); } } HelloPriority的第二个实现类HelloPriorityC,可见Priority属性

    81050

    如何借助 Quarkus 和 MicroProfile 实现微服务

    Kubernetes 只涵盖了其中的三个,那么我们该如何实现剩余的哪些呢?...根据所使用的语言或框架,我们有很多可遵循的策略,但是在本文中,我们会看到如何使用 Quarkus 来实现其中某些微服务特性。 什么是 Quarkus?...如何使用 Quarkus 实现微服务特性 起步 开始使用 Quarkus 的最快捷方式就是通过起始页面,在这里我们可以添加所需的依赖。...最后需要配置的就是服务的位置(hostname 部分)。在 Quarkus 中,配置属性是在src/main/resources/application.properties文件中设置的。...要配置服务的位置,我们需要使用 Rest Client 接口的全限定名并结合 URL 作为键,然后使用实际的位置作为: org.acme.RatingService/mp-rest/url=http

    1.8K50
    领券