gpt4 book ai didi

java - Spring加密和解密属性文件中的API key

转载 作者:数据小太阳 更新时间:2023-10-29 02:04:48 26 4
gpt4 key购买 nike

原始问题

我在 Tomcat 中有一个属性文件,在 src/test/resources 中有一个用于测试的属性文件。

目前我有以下设置。我的属性文件加载到我的 XML 文件中config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- Repository and Service layers -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:cache="http://www.springframework.org/schema/cache"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd">

<!-- ========================= RESOURCE DEFINITIONS ========================= -->

<context:component-scan base-package="be.omniatravel.service" />
<context:property-placeholder
location="file:${catalina.base}/conf/omniatravel.properties"
ignore-unresolvable="true" />


<tx:annotation-driven />

</beans>

test-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- Repository and Service layers -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:cache="http://www.springframework.org/schema/cache"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd">

<!-- ========================= RESOURCE DEFINITIONS ========================= -->

<context:component-scan base-package="be.omniatravel.service" />
<context:property-placeholder
location="classpath:omniatravel_test.properties"
ignore-unresolvable="true" />


<tx:annotation-driven />

</beans>

我可以通过将它放在我的 Java 文件中来访问这些值

public class SunnycarsClient extends WebServiceGatewaySupport {

@Value("${sunnycars.serviceUri}")
private String uri; // provided by the webservice

@Value("${sunnycars.operatingKey}")
private String key; // provide by the webservice

@Value("${sunnycars.passphrase}")
private String passphrase; // provided by the webservice

}

目前,操作 key 和密码短语作为平面文本存储在这些属性中。我想将它们存储为加密值以最大程度地降低风险,并且仍然能够以我现在的方式进行访问。

更新1

所以我现在所做的就是将config.xml的内容替换为

<?xml version="1.0" encoding="UTF-8"?>
<!-- Repository and Service layers -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:cache="http://www.springframework.org/schema/cache"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd">

<!-- ========================= RESOURCE DEFINITIONS ========================= -->

<context:component-scan base-package="be.omniatravel.service" />

<!-- bean definitions -->

<bean
class="org.jasypt.spring.properties.EncryptablePropertyPlaceholderConfigurer">
<constructor-arg>
<bean class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
<property name="config">
<bean class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
<property name="algorithm" value="PBEWithMD5AndDES" />
<property name="passwordEnvName" value="APP_ENCRYPTION_PASSWORD" />
</bean>
</property>
</bean>
</constructor-arg>
<property name="locations">
<list>
<value>file:${catalina.base}/conf/omniatravel.properties</value>
</list>
</property>
</bean>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="sunnycarsMarshallerUri">
<value>${sunnycars.marshallerUri}</value>
</property>
<property name="sunnycarsServiceUri">
<value>${sunnycars.serviceUri}</value>
</property>
<property name="sunnycarsContextPath">
<value>${sunnycars.contextPath}</value>
</property>
<property name="sunnycarsOperatingKey">
<value>${sunnycars.operatingKey}</value>
</property>
<property name="sunnycarsPassphrase">
<value>${sunnycars.passphrase}</value>
</property>
</bean>

<tx:annotation-driven />

</beans>

但我仍然不清楚我应该如何从我的 Java 代码访问这些。

另外,在属性文件中,我应该将 sunnycars.operatingKey = THE_KEY 替换为 sunnycars.operatingKey = enc(ENCRYPTED_KEY),但是您如何获得 ENCRYPTED_KEY 值?

最佳答案

首先,您必须从 http://www.jasypt.org/ 下载 jasypt1.9* 工具包

和尝试在 cmd 中使用以下命令运行 encrypt.dat 文件,例如

encrypt.date input=[YOUR PROPERTY FILE VALUE] password=[加密 key 值]它会产生您需要在属性文件中替换的加密值的输出与

=ENC(output encrypted value)

 .. 

<bean class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
<property name="algorithm" value="PBEWithMD5AndDES" />
<property name="password" value="APP_ENCRYPTION_PASSWORD" />
</bean> ..

你也可以在类文件中硬编码密码并分配给bean

<bean class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
<property name="algorithm" value="PBEWithMD5AndDES" />
<property name="password" value="#Key.keyValue}" />
</bean>

其中 Key.keyValue 是 Key 类的静态方法。

关于java - Spring加密和解密属性文件中的API key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32881689/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com