Spring加密和解密属性文件中的API密钥

2024-01-12

原始问题

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

目前我有以下设置。我的属性文件加载到我的 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>

测试配置.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

}

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

Update 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 with sunnycars.operatingKey = enc(ENCRYPTED_KEY),但是如何获得 ENCRYPTED_KEY 值呢?


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

和 尝试运行encrypt.dat文件中包含以下命令cmd like

encrypt.date input=[您的属性文件值] 密码=[加密密钥值] 它会生成 您需要在属性文件中替换的加密值的输出 和

=ENC(输出加密值)

 .. 

        <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 类的静态方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring加密和解密属性文件中的API密钥 的相关文章

  • 通过 AJAX 发送 XML

    我在 jQuery 中创建了一个 xml 文档 如下所示 var xmlDocument
  • Java 创建浮雕(红/蓝图像)

    我正在编写一个 Java 游戏引擎 http victoryengine org http victoryengine org 并且我一直在尝试生成具有深度的 3D 图像 您可以使用那些红色 蓝色眼镜看到 我正在使用 Java2D 进行图形
  • JTree 节点不会被直观地选择

    不知何故 我无法为我的 JTree 节点启用 选择突出显示 我正在我的项目中使用自定义单元格渲染器 这很可能导致此问题 这是完整的渲染器类代码 protected class ProfessionTreeCellRenderer exten
  • 无法加载 jar 文件的主类

    我使用 Eclipse IDE 开发了一个应用程序 创建应用程序后 我以 jar 格式导出项目 当我尝试运行此 jar 文件时 出现错误 无法加载主类 请帮忙 当您将项目导出为 jar 时 请参阅此所以问题 https stackoverf
  • 通过 InjectMocks Spy 注入对象

    我需要对一个类运行一系列单元测试 该类具有 Autowired Logger 实现 实现的基本思想是 Mock Logger logger InjectMocks TestedClass tested 但我想保存日志输出功能 Mockito
  • Java 重写 hashCode() 得到 StackOverflowError

    所以我不太熟悉重写 hashCode 并且我似乎在 hashCode 方法中以某种方式进行了一些无限递归 这是我的场景 我有一个 DuplicateCache 类 它是一个缓存对象 用于检查系统中的重复对象 我有一个静态内部类 Duplic
  • Android - 除了普通 SSL 证书之外还验证自签名证书

    我有一个通过 SSL 调用 Web 服务的 Android 应用程序 在生产中 我们将拥有由受信任的 CA 签名的普通 SSL 证书 但是 我们需要能够支持自签名证书 由我们自己的 CA 签名 我已经成功实施了接受自签名证书的建议解决方案
  • Spring Stomp over Websocket:流式传输大文件

    我的SockJs客户端在网页中 发送帧大小为16K的消息 消息大小限制决定了我可以传输的文件的最大大小 以下是我在文档中找到的内容 Configure the maximum size for an incoming sub protoco
  • 服务器到 Firebase HTTP POST 结果为响应消息 200

    使用 Java 代码 向下滚动查看 我使用 FCM 向我的 Android 发送通知消息 当提供正确的服务器密钥令牌时 我收到如下所示的响应消息 之后从 FCM 收到以下响应消息 Response 200 Success Message m
  • 场景生成器删除 fxml 文件中的导入

    我使用场景构建器 Gluon Scene Builder JavaFX Scene Builder 8 1 1 来创建应用程序的 UI 并使用 Eclipse 开发 JavaFX 现在 每次我在场景生成器中保存某些内容时 它都会从 fxml
  • Java替换特定字符

    这是我在这个网站上的第一个问题 所以我会尽量不要成为一个十足的菜鸟 我目前正在用java 创建刽子手游戏 所以我问你的问题是我们是否被赋予了 幽灵 这个词 并将 Ghost 替换为 hiddenWord ghost length for i
  • Java:VM 如何在 32 位处理器上处理 64 位“long”

    JVM 如何在 32 位处理器上处理 64 位的原始 long 在多核 32 位机器上可以并行利用多个核心吗 64 位操作在 32 位机器上慢了多少 它可能使用多个核心来运行不同的线程 但不会并行使用它们进行 64 位计算 64 位长基本上
  • 不兼容的类型:在 java netbeans 中对象无法转换为 String

    我试图在我的项目中使用对象数组 但出现错误 incompatible types Object cannot be converted to String 在这一行 ST1 new String emt1 emt2 emt3 emt4 现在
  • 将 RSA 密钥从 BigIntegers 转换为SubjectPublicKeyInfo 形式

    WARNING 最初的问题是关于 PKCS 1 编码密钥 而问题中的实际示例需要SubjectPublicKeyInfo X 509 编码密钥 我目前正致力于在 java 中从头开始实现 RSA 算法 特别是密钥生成方面 现在我的代码可以给
  • 在 Selenium WebDriver 上如何从 Span 标签获取文本

    在 Selenium Webdriver 上 如何从 span 标记检索文本并打印 我需要提取文本UPS Overnight Free HTML代码如下 div id customSelect 3 class select wrapper
  • Path2D 上的鼠标指针检测

    我构建了一个Path2D http docs oracle com javase 7 docs api java awt geom Path2D html表示由直线组成的未闭合形状 我希望能够检测何时单击鼠标并且鼠标指针靠近路径 在几个像素
  • 如何将实例变量传递到 Quartz 作业中?

    我想知道如何在 Quartz 中外部传递实例变量 下面是我想写的伪代码 如何将 externalInstance 传递到此作业中 public class SimpleJob implements Job Override public v
  • 使用 powershell 编辑 XML

    好吧 我感觉自己像个大白痴 为了工作中的管理目的 我使用 Powershell 已经有一段时间了 也就是说 编写脚本不是我的强项 现在 我正在尝试编写一个 PS 脚本 将一个部分添加到一堆机器上的 XML 中 以添加设置来解决我们在某个应用
  • Java中有类似分支/跳转表的东西吗?

    Java有类似分支表或跳转表的东西吗 分支表或跳转表是 根据维基百科 http en wikipedia org wiki Branch table 用于描述使用分支指令表将程序控制 分支 转移到程序的另一部分 或可能已动态加载的不同程序
  • java中如何找到class文件的包

    我正在编写一个使用 class 文件的 java 程序 我希望能够读取文件系统上的 class 文件 使用 InputStream 并确定它所在的包 该 class 文件可能不在一个好的包目录结构中 它可能位于某个随机位置 我怎样才能做到这

随机推荐

  • Mac OS X Lion 上的 MAMP 2.0.1 与 Ruby on Rails 3.2.0

    以前有人问过这个问题 但我找不到比 2010 年更新的结果 两年内可能会发生很多变化 事实上 从那以后就没有人问过这个问题 这让我想 也许我错过了一些东西 所以 有没有一种简单的方法可以设置 Ruby On Rails 3 2 0 以在 M
  • 无法从 eclipse 运行 Tomcat 7

    我正在使用 Eclipse EE Helios 我想将我创建的项目部署到 Tomcat 7 我已经下载了Tomcat并创建了动态项目 我打开了Server View在 Eclipse 中 我按下New在 Eclipse 中定义一个新的 To
  • 如何按定义的顺序迭代 Python 字典?

    我试图迭代以特定顺序定义的字典 但它总是以与我在代码中定义的顺序不同的顺序进行迭代 这只是我正在尝试做的事情的一个基本示例 我正在迭代的字典更大 具有更复杂的命名键 并且不按字母 数字顺序排列 level lookup PRIORITY 1
  • 需要将光标置于文本区域中文本的开头

    我体内有这个并且有效 onLoad document forms post message focus 但我需要将光标放在textarea在任何现有文本的开头 而不是结尾 这就把它放在最后了 function moveCaretToStar
  • 布尔注释导致重复?

    我正在尝试实现一个基于外键表的基本 收藏夹 系统 假设我有以下简单模型 class Item models Model id models IntegerField class User models Model id models Int
  • 如何在 JavaScript 中复制 div

    我想知道如何复制DIV通过 JavaScript 多次编辑元素 而不在我的 html 代码中复制 DIV 假设您选择了 div 执行以下操作 var myDiv document getElementById myDivId DOM API
  • Twitter Bootstrap 使用 JSON 进行预输入

    我如何将 Twitter Bootstrap Typeahead 与 JSON 结合使用 我的 Bootstrap 版本是2 2 1 我的 JSON 响应 label Sistemski Administrator value 1 labe
  • 完全滑动 UITableViewCell 删除 UITableView iOS 8

    我想模仿 UITableViewCell 的滑动删除功能 就像 iOS 8 中的邮件应用程序一样 我不是指滑动以显示删除按钮 我指的是当你滑动时 它会显示 3 个操作 但如果你继续向左滑动 电子邮件就会被删除 在 iOS 8 中 UITab
  • Ionic - 仅在具体页面中显示侧面菜单

    我正在使用 Ionic Framework 开发一个应用程序 我只想在一些具体视图中显示侧面菜单 而不是在每个视图中 我有我的菜单 html file
  • ORA-12519,TNS:未找到适当的服务处理程序

    我正在正确关闭休眠连接 但在几次点击或刷新一些页面后我收到此错误 我不明白有什么问题 我还检查了会话数量 它也通过以下命令增加 并且还给出了程序代码 托管bean代码 public List
  • Whatsapp 身份验证如何运作?

    我想开发一个移动应用程序并使用类似whatsapp的用户注册 现在我记得几年前讨论过的安全问题 Whatsapp 过去仅通过电话号码和 IMEI 来验证用户身份 当然 这并不是真正安全 但我真的不知道如何更安全 现在我已经很长一段时间没有听
  • 调用 python webbrowser 时抑制/重定向 stderr

    我有一个 python 程序 它在新的浏览器窗口中的单独选项卡中打开多个网址 但是当我从命令行运行该程序并使用打开浏览器时 webbrowser open new url Firefox 的 stderr 打印到 bash 查看文档我似乎找
  • 术语的含义 - 资源获取就是初始化

    我知道 RAII 是做什么的 这都是为了在代码抛出异常时防止内存泄漏等 现在我想明白这句话的意思smart term http en wikipedia org wiki 收购 http en wikipedia org wiki Acqu
  • 如何在点击按钮时发出小闪光?

    所以我正在制作一个有超过 100 个按钮的 Android 应用程序 但是你知道当你正常点击一个按钮时 当你不改变背景或任何东西时 它会闪烁橙色 然而 由于我已经为按钮添加了背景颜色 当点击它们时 它只会进入下一个屏幕 并且您无法看出您已经
  • 在Monaco编辑器中,如何从IEditor界面获取选定的文本

    迷失在 API 的电报文档中 如何从 IEditor 界面获取选定的文本 这selection返回的对象getSelection只有行号和列号 那么我是否需要在编辑器的文本中搜索该文本 并且 与返回的所有其他选择相比 主要选择是什么getS
  • 为什么我的 ibtool 失败,退出代码为 255?

    突然间我无法构建我的项目 我收到以下编译器错误 Applications Xcode app Contents Developer Platforms iPhoneSimulator platform Developer usr bin i
  • LLVM 检索 AllocaInst 的名称

    我正在尝试检索传递给 a 的指针的名称cudaMalloc https docs nvidia com cuda cuda runtime api group CUDART MEMORY html group CUDART MEMORY 1
  • UI Router 从列表页面加载详细信息页面

    使用 ui router 的 AngularJS 应用程序 我的列表页面加载正确 但是当单击列表页面上的链接时 我的 url 发生了变化 但页面上的 html 没有变化 它仍然保留在列表页面上 这个路由有什么问题吗 app js var m
  • CGContext 擦除错误

    我不断收到此错误 Jan 31 13 56 51 Michaels MacBook Air local CocoaDrawing 2129
  • Spring加密和解密属性文件中的API密钥

    原始问题 我有一个位于 Tomcat 中的属性文件和一个位于 src test resources 中的用于测试的属性文件 目前我有以下设置 我的属性文件加载到我的 XML 文件中配置文件